【发布时间】:2020-11-28 01:10:29
【问题描述】:
我的目标是搜索长度为一到两个字符的查询文本。 这是我对索引的设置。
"settings" : {
"index" : {
"number_of_shards" : "5",
"provided_name" : "my_user",
"analysis" : {
"filter" : {
"ngrammed" : {
"type" : "ngram",
"min_gram" : "3",
"max_gram" : "50"
}
},
"analyzer" : {
"ngrammed_ci" : {
"filter" : [
"lowercase",
"ngrammed"
],
"type" : "custom",
"tokenizer" : "standard"
},
"keyword_ci" : {
"filter" : [
"lowercase"
],
"type" : "custom",
"tokenizer" : "keyword"
}
}
}
}
}
我有一组用户,其显示名称字段包含以下分析器。假设我有几个用户的名字像
Allen, Alec, Kimball, Polly
我面临的问题是,当我使用al 以及Allen 和Alec 之类的2 个字符长度的查询字符串进行搜索时,它也与Kimball 匹配,因为ngram 过滤器将Kimball 标记为@987654331 @ 在倒排索引中。我试图避免这种情况。还想知道是否有任何方法可以在不更改索引方面的任何内容的情况下实现此功能,并且仅针对查询方面进行更改。
"user_display_name" : {
"type" : "text",
"fields" : {
"ci" : {
"type" : "text",
"analyzer" : "keyword_ci"
}
"cs" : {
"type" : "keyword"
}
},
"analyzer" : "ngrammed_ci",
"search_analyzer" : "standard"
}
【问题讨论】:
-
这是一个非常大的索引。怎么查询都会很慢。
-
另外,这是在云端还是在您的本地?
标签: elasticsearch search n-gram