减少elasticsearch返回的结果数量

时间:2014-03-25 10:43:22

标签: elasticsearch

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

使用自定义分析器。您可以将分析仪名称设置为默认(而不是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:您需要创建索引并在此更改后重新索引整个数据。

答案 1 :(得分:0)

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

您可以使用此类过滤器:

{

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

}

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

您可以查看this页面了解完整文档。

为了制作更好的建议者,我建议您浏览this。这不仅会根据给定的查询限制您的结果(只是您想要的方式),还会大大提高软件的效率!