【问题标题】:Elastic search give priority to starts with match弹性搜索优先以匹配开头
【发布时间】:2020-07-09 03:36:26
【问题描述】:

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

我在搜索文档时是否遗漏了什么?请帮助我。谢谢。

【问题讨论】:

    标签: java elasticsearch indexing full-text-search


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2022-06-18
      • 2016-11-25
      • 2019-11-21
      • 2021-03-11
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多