gpt4 book ai didi

elasticsearch - Elasticsearch 中的自定义排序

转载 作者:行者123 更新时间:2023-12-02 23:26:16 35 4
gpt4 key购买 nike

我有一些带有完成提示的 flex 搜索文档。我搜索一些值,例如Stack,结果按以下顺序显示:

  • 堆栈溢出
  • 堆栈溢出
  • 堆栈
  • StackOver
  • StackOverflow

  • 我希望结果按顺序显示:
  • 堆栈
  • StackOver
  • StackOverflow
  • 堆栈溢出
  • 堆栈溢出

  • 也就是说,完全匹配应该放在首位,而不是空格或特殊字符的结果。
    TIA

    最佳答案

    这完全取决于您分析查询字符串的方式。我建议您在同一字符串字段上应用多个分析器。以下是您要自动完成/建议使用功能的“名称”字段的映射示例:

    "name": {
    "type": "string",
    "analyzer": "keyword_analyzer",
    "fields": {
    "name_ac": {
    "type": "string",
    "index_analyzer": "string_autocomplete_analyzer",
    "search_analyzer": "keyword_analyzer"
    }
    }
    }

    在这里,keyword_analyzer和string_autocomplete_analyzer是在索引设置中定义的分析器。下面是一个示例:
    "keyword_analyzer": {
    "type": "custom",
    "filter": [
    "lowercase"
    ],
    "tokenizer": "keyword"
    }

    "string_autocomplete_analyzer": {
    "type": "custom",
    "filter": [
    "lowercase"
    ,
    "autocomplete"
    ],
    "tokenizer": "whitespace"
    }

    自动填充是一种分析过滤器:
    "autocomplete": {
    "type": "edgeNGram",
    "min_gram": "1",
    "max_gram": "10"
    }

    设置完此选项后,在Elasticsearch中搜索自动建议时,您可以使用multiMatch查询而不是常规的match查询,并且在这里您可以对multiMatch中的各个字段进行增强。以下是Java中的示例:
    QueryBuilders.multiMatchQuery(yourSearchString,"name^3","name_ac");

    您可能需要根据需要更改升压(^ 3)。

    如果这还不能满足您的要求,您可以考虑再使用一个分析器来根据第一个单词分析字符串,并将该字段包含在multiMatch中。以下是此类分析器的示例:
    "first_word_name_analyzer": {
    "type": "custom",
    "filter": [
    "lowercase"
    ,
    "whitespace_merge"
    ,
    "edgengram"
    ],
    "tokenizer": "keyword"
    }

    使用这些分析过滤器:
    "whitespace_merge": {
    "pattern": "\s+",
    "type": "pattern_replace",
    "replacement": " "
    },
    "edgengram": {
    "type": "edgeNGram",
    "min_gram": "1",
    "max_gram": "32"
    }

    您可能必须对提升值进行一些试验,以便根据您的要求获得最佳结果。希望这可以帮助。

    关于elasticsearch - Elasticsearch 中的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42583891/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com