弹性搜索优先于匹配开始

问题描述 投票:1回答:1

我正在使用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个文档。

  • 第一份文件-“技术”:[“我的测试技术”]
  • 第二文档-“技术”:[“测试技术”]
  • 第三文档“技术”:[“技术测试”]

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

搜索结果应为:

  • 第一结果-第二文档-“技术”:[“测试技术”]其他可以任意顺序
  • 第一份文件-“技术”:[“我的测试技术”]
  • 第三文档“技术”:[“技术测试”]

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

SearchRequest searchRequest = new SearchRequest(“ profile1”);SearchSourceBuilder searchSourceBuilder =新的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);

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

java elasticsearch indexing full-text-search
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.