Completion Suggester未按预期工作

时间:2018-05-02 12:46:18

标签: elasticsearch autocomplete

{
"settings": {
    "analysis": {
        "filter": {
            "autocomplete_filter": {
                "type": "edgeNGram",
                "min_gram": 1,
                "max_gram": 20
            }
        },
        "analyzer": {
            "autocomplete": {
                "type": "custom",
                "tokenizer": "whitespace",
                "filter": [
                    "lowercase",
                    "autocomplete_filter"
                ]
            }
        }
    }
},
"mappings": {
    "test": {
        "properties": {
            "suggest": {
                "type": "completion",
                "analyzer": "autocomplete"
            },
            "hostname": {
                "type": "text"
            }
        }
    }
}

} `

以上映射存储在弹性搜索中。

POST index/test { "hostname": "testing-01", "suggest": [{"input": "testing-01"}] } POST index/test { "hostname": "testing-02", "suggest": [{"input":"testing-02"}] } POST index/test { "hostname": "w1-testing-01", "suggest": [{"input": "w1-testing-01"}] }     POST索引/测试     {       “hostname”:“w3-testing-01”,       “建议”:[{“输入”:“w3-testing-01”}]     } ` 当有30个主机名为w1且主机名为w3的文档时,当搜索到术语“w3”时,我首先获得所有w1的建议,然后获得w3的建议。 建议查询

{
"query": {
    "_source": {
        "include": [
            "text"
        ]
    },
    "suggest": {
        "server-suggest": {
            "text": "w1",
            "completion": {
                "field": "suggest",
                "size": 10
            }
        }
    }
}

}

尝试了不同的分析仪,同样的问题。 可以一些身体指导?

1 个答案:

答案 0 :(得分:1)

这是一个常见的陷阱。这是因为min_ngram为1,因此w1-testing-01w3-testing-01都会生成令牌w。由于您只指定了analyzerautocomplete分析器也会在搜索时启动,因此w3的搜索建议也会产生令牌w,因此w1-testing-01 1}}和w3-testing-01匹配。

解决方案是在search_analyzer字段中添加suggest,以便在搜索时不使用autocomplete分析器(您可以使用standard,{{ 1}}或者任何分析器对你的用例都有意义),但仅限索引时间。

keyword