繁体   English   中英

弹性搜索优先从匹配开始

[英]Elastic search give priority to starts with match

我正在使用 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 = 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);

我在搜索文档时遗漏了什么吗? 请帮我解决这个问题。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM