【问题标题】:Reduce number of results returned by elasticsearch减少elasticsearch返回的结果数量
【发布时间】:2014-03-25 10:43:22
【问题描述】:

我正在使用 ngram 分析器使用 elasticsearch 对特定字段进行自动完成搜索。 默认情况下,我在查询中使用“size:10”将结果数设置为返回 10。

但我想要的是,随着我的搜索接近完全匹配,弹性搜索返回的结果应该减少

例如 如果搜索:"fl" 将返回:"flake", "flower", "fleet", "flank", "flatter"

如果搜索:"fla" 将返回:"flan","flank", "flatter"

如果搜索:"flan" 将返回:"flan","flank"

现在即使我搜索"flan",也会返回所有结果 我也在使用拼音搜索。

【问题讨论】:

  • 您的数据是多语言的吗?

标签: elasticsearch


【解决方案1】:

如果您的数据不是多语言的,则此答案适用(仅当数据语言为英语时)

使用自定义分析器。如果您希望它成为所有情况下的默认分析器,您可以将分析器名称设置为 default(而不是 myAnalyzer)。

index :
analysis :
    analyzer : 
        myAnalyzer :
            type : custom
            tokenizer : whitespace
            filter : [word_filter, lowercase, stop]
    filter :
        word_filter :
            type : word_delimiter
            split_on_numerics : false
            generate_word_parts : false
            generate_number_parts : false
            split_on_case_change : false
            preserve_original : false

PS:您需要在此更改后创建索引并重新索引整个数据。

【讨论】:

    【解决方案2】:

    一种显着减少延迟的方法是,不要使用 unigram 作为 min_gram,而是使用 digrams 或 trigrams。否则,如果用户只键入一个字母(例如“a”),则可能有数十万个来自数据库的结果,这对用户来说甚至都不是“远程相关的”(而且效率非常低)。

    您可以使用这种过滤器:

    {
    
     "filter": 
    {
                "autocomplete_filter": {
                    "type":     "edge_ngram",
                    "min_gram": 3,
                    "max_gram": 20
                }
        }
    
    }
    

    这将通过删除不相关的结果来显着减少结果数量,从而提高软件的效率。

    您可以查看this 页面以获取完整文档。

    为了获得更好的建议,我建议你通过this。这不仅会根据给定的查询(只是您想要的方式)限制您的结果,而且还会大大提高软件的效率!

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2023-03-26
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2019-01-07
      • 2016-02-06
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多