【发布时间】:2021-04-22 13:15:22
【问题描述】:
我正在寻找一种方法来模糊部分匹配单词匹配的字段,但是我还想添加严格的短语匹配。
即说我有诸如
之类的字段foo bar
bar foo
我想实现以下搜索行为:
-
如果我搜索
foo,我想返回两个结果。 -
如果我搜索
ba,我想返回两个结果。 -
如果我搜索
bar foo,我只想返回一个结果。 -
如果我搜索
bar foo foo,我不想返回任何结果。
我还想添加单字符模糊匹配,所以如果foo 被错误输入为fbo,那么它会返回两个结果。
我当前的搜索和索引分析器使用edge_gram 标记器并且工作得相当好,除非有任何 gram 匹配,否则无论以下单词是否匹配,它都会返回结果。即我的搜索将返回以下搜索结果bar foo buzz
foo bar
bar foo
我的 tokenzier:
ngram_tokenizer: {
type: "edge_ngram",
min_gram: "2",
max_gram: "15",
token_chars: ['letter', 'digit', 'punctuation', 'symbol'],
},
我的分析仪:
nGram_analyzer: {
filter: [
lowercase,
"asciifolding"
],
type: "custom",
tokenizer: "ngram_tokenizer"
},
我的字段映射:
type: "search_as_you_type",
doc_values: false,
max_shingle_size: 3,
analyzer: "nGram_analyzer"
【问题讨论】:
标签: elasticsearch