我正在尝试使用ElasticSearch实现前缀自动完成功能,这是我对“建议”字段的映射:

PUT vdpinfo
{
    "mappings": {
        "details" : {
            "properties" : {
                "suggest" : {
                    "type" : "completion"
                },
                "title": {
                  "type": "keyword"
                }
            }
        }
    }
}

而且我用单字和双字(bigram)索引了一些数据,例如:
{"suggest": "leather"}

并且:
{"suggest": "leather seats"}
{"suggest": "2 leather"}

我的搜索查询是这样的:
GET /vdpinfo/details/_search
{
        "suggest": {
            "feature-suggest": {
                "prefix": "leather",
                "completion": {
                    "field": "suggest"
                }
            }
        }
    }

但是结果返回{"suggest": "leather"}{"suggest": "2 leather"},更重要的是,{"suggest": "2 leather"}的排名高于leather

我的问题是为什么返回2 leather,为什么不像查询中那样仅执行prefix自动完成功能。 prefix: leather

最佳答案

这是因为用于分析数据的默认分析器是 simple 分析器,它会在遇到非字母的字符时将文本简单地分解为术语,因此2 leather实际上被索引为leather,因此为什么显示此结果(以及为什么它首先显示)。

他们默认情况下使用simple分析器而不是standard的原因是不基于停用词(explanation here)提供建议。

因此,如果您改用standard分析器,则对2 leather不会有任何建议

PUT vdpinfo
{
    "mappings": {
        "details" : {
            "properties" : {
                "suggest" : {
                    "type" : "completion",
                    "analyzer" : "standard"
                },
                "title": {
                  "type": "keyword"
                }
            }
        }
    }
}

关于elasticsearch - 前缀自动完成建议elasticsearch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43419880/

10-11 22:13