簡體   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