【问题标题】:How to search starting and ending of a sentence in elasticsearch如何在elasticsearch中搜索句子的开头和结尾
【发布时间】:2018-02-28 19:57:03
【问题描述】:

我试图搜索以下两种情况

案例一:

我想搜索以特定单词开头的名称。例如:

名称:测试名称

名称:名称测试

name : 测试名称 test

如果我搜索“test”,那么它应该只返回“test name”和“test name test”。

案例2:

我想搜索以特定单词结尾的名称。例如:

名称:测试名称

名称:名称测试

name : 测试名称 test

如果我搜索“test”,那么它应该只返回“name test”和“test name test” .

谁能帮我找出 elasticsearch java API 中的查询或任何其他搜索方式。

弹性搜索 6.2.1 版

非常感谢任何帮助。

【问题讨论】:

  • 我曾经问过一个类似的问题,我们的 Elastic 好朋友 @AndreiStefan 庄严地回答了这个问题。你可以找到它here

标签: java elasticsearch elasticsearch-query


【解决方案1】:

您需要使用带有search_analyzer 属性(analyzer_startswith 或analyzer_endswith)的映射

"mappings": {
    "some_index": {
        "properties": {
            "title": {
                "search_analyzer": "analyzer_startswith",
                "index_analyzer": "analyzer_startswith",
                "type": "string"
            }
        }
    }
}

类似

【讨论】:

【解决方案2】:

对于案例 1,您可以使用CompletionSuggester。您需要一个特殊的字段映射才能使用完成建议,如下所示:

"mappings": {
"some_index": {
    "properties": {
        "title": {
            "type": "completion"
        }
    }
}}

在代码中,您应该像这样定义建议者(term 是您的搜索词,“starts”是任意名称):

CompletionSuggestionBuilder completionBuilder = SuggestBuilders.completionSuggestion("title").prefix(term);
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("starts", completionBuilder);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.suggest(suggestBuilder);
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(searchSourceBuilder);

获得搜索响应后,对其进行处理以检索建议:

  Suggest suggest = searchResponse.getSuggest();
  if (suggest == null) {
    return Collections.emptyList();
  } else {
    CompletionSuggestion suggestion = suggest.getSuggestion("starts");
    return suggestion
        .getOptions()
        .stream()
        .map(CompletionSuggestion.Entry.Option::getText)
        .map(Text::toString)
        .collect(Collectors.toList());
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2019-04-26
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多