我正在使用Elasticsearch 6.8版本进行文档索引,并且在搜索时有此要求。我已经使用以下设置创建了索引。

{
  "settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"analysis": {
  "analyzer": {
    "default": {
      "type": "custom",
      "tokenizer": "icu_tokenizer"
    }
  }
}
  },
      "mappings": {
"person": {
  "properties": {
    "firstName": {
      "type": "text"
    },
    "lastName": {
      "type": "text"
    },
    "technologies": {
      "type": "nested"
    }
  }
}
  }
}

例如,我正在使用以下技术创建3个文档。
  • 1st document-“技术”:[“我的测试技术”]
  • 第二份文档-“技术”:[“测试技术”]
  • 第三个文档“技术”:[“技术测试”]

  • 因此,当通过关键字“test”进行搜索时,它将返回所有文档,这是正确的行为,但是我希望第二个文档具有优先权,因为它以test *开头。因此,我的要求是从以下优先级入手。

    搜索结果应为:
  • 第一个结果-第二个文档-“技术”:[“测试技术”]
    其他人可以按任意顺序
  • 1st document-“技术”:[“我的测试技术”]
  • 第三个文档“技术”:[“技术测试”]

  • 这是我的搜索Java代码。我正在使用elasticsearch-rest-high-level-client库。

    SearchRequest searchRequest = new SearchRequest(“profile1”);
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        QueryBuilder queryBuilder = QueryBuilders
                .boolQuery()
                .must(QueryBuilders
                        .matchQuery("technologies.name", technology));
    
        searchSourceBuilder.query(QueryBuilders
                .nestedQuery("technologies",
                        queryBuilder,
                        ScoreMode.Avg));
    
        searchRequest.source(searchSourceBuilder);
    
        SearchResponse response =
                client.search(searchRequest, RequestOptions.DEFAULT);
    

    我在搜索文档时缺少什么?请帮我。谢谢。

    最佳答案

    我设法从以下链接中找到更多有用的答案。

    https://www.elastic.co/blog/starts-with-phrase-matching

    https://gist.github.com/polyfractal/4704772

    10-08 07:08