我尝试使用以下简单查询在elasticsearch中搜索文档:
{
"query": {
"match": { "name": "Test name" }
}
}
我的索引里有七千万份文件。我以前使用过空格标记器,它很好。但是现在我开始使用ngram,甚至这个队列至少运行6-7秒。我创建这样的索引:
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "custom_analyzer"
}
}
},
"settings": {
"analysis": {
"tokenizer": {
"custom_tokenizer": {
"token_chars": [
"letter",
"digit",
"symbol",
"punctuation"
],
"min_gram": "2",
"type": "ngram",
"max_gram": "3"
}
},
"analyzer": {
"custom_analyzer": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "custom_tokenizer"
}
}
}
}
}
有没有优化搜索的方法?还是说ngram真的那么慢?
发布于 2022-06-21 10:27:22
是的,众所周知,ngram
会导致性能问题,因为它会创建许多标记,增加Elasticsearch索引大小和匹配search terms
,提高性能的一种方法是只在您真正需要它的查询中使用,例如在fix查询中,如果您共享搜索用例,社区可能会提供其他更好的选择。
https://stackoverflow.com/questions/72697494
复制相似问题