【发布时间】:2014-11-23 20:33:51
【问题描述】:
我正在尝试使用 elasticsearch 和 python 为用户构建一个类似 twitter 的搜索。那是对first_name, last_name and username. 的搜索,我决定使用 ngram。这是分析器的配置方式:
settings = {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding",
"mynGram"
]
}
},
"filter": {
"mynGram": {
"type": "nGram",
"min_gram": 2,
"max_gram": 20
}
}
}
}
这将为大约 700,000 个文档生成 700 MB 的索引大小。这涵盖了我的大部分用例,但有一个:
-
John- 给出一组结果 -
John D- 给出与 'John' 相同的结果集 -
John Do- 给出正确的结果集。
我的猜测是因为 min. ngram 大小为 2,它会在上面的查询 2 中创建一个盲点。我可以选择减少最小值。 ngram 大小为 1,但我担心可伸缩性和性能问题。
考虑到可扩展性和性能,ngram 是正确的方法吗?
【问题讨论】:
标签: search elasticsearch n-gram