【发布时间】:2017-04-11 12:09:15
【问题描述】:
假设我有一个字段“productTitle”,我想让我的用户使用它来搜索产品。
我还想应用自动完成功能。所以我使用带有以下过滤器的 autocomplete_analyzer:
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10
}
但是,在用户进行搜索的同时,我不希望应用“edge_ngram”,因为它会产生很多不相关的结果。
例如,当用户想要搜索“mi”并开始输入“m”、“mi”.. 他们应该得到以 m,mi 开头的结果作为自动完成选项。但是,当他们实际进行查询时,他们应该只得到带有单词“mi”的结果。目前他们还看到“迷你”等结果。
因此,是否可以使用两个不同的分析器为“productTitle”编制索引?我可以选择多字段类型吗?
编辑:productTitle 的映射
"productTitle" : {
"type" : "string",
"index_analyzer" : "second",
"search_analyzer" : "standard",
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
, “第二”分析器
"analyzer": {
"second": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"trim",
"autocomplete_filter"
]
}
所以当我查询时:
"filtered" : {
"query" : {
"match" : {
"productTitle" : {
"query" : "mi",
"type" : "boolean",
"minimum_should_match" : "2<75%"
}
}
}
}
我也得到类似"mini" 的结果。但我只需要得到结果,包括 "mi"
谢谢
【问题讨论】:
标签: elasticsearch