我正在使用Elasticsearch进行全文搜索,并且试图找到一种更好的方式来搜索长短语。
例如,我有一个字段“ Seller”,最多可以包含250个字符,我想查找所有带有Seller =“带有空格的卖家名称”的商品。
如果我正确理解,为了搜索包含空格的文本,我必须使用NGramTokenizer,它基本上会创建令牌,例如:
's', 'so', 'som', 'some', 'some ', 'some s' etc.
Run Code Online (Sandbox Code Playgroud)
我知道我可以定义最小和最大克,但我需要能够搜索“ a b”,因此我的最小克必须至少为3,最大克为字段的最大长度。
因此,我必须为每个项目创建很多令牌,并且这只是卖方,但是关于4k字符的描述呢?
该解决方案的性能非常低。
谁能建议一个更好的解决方案来处理带空格的长短语?
我的索引设置:
analysis: {
analyzer: {
autoComplete: {
filter: [
"lowercase"
],
type: "custom",
tokenizer: "autoComplete"
},
caseInsensitive: {
type: "custom",
filter: [
"lowercase"
],
tokenizer: "keyword"
}
},
tokenizer: {
autoComplete: {
type: "nGram",
min_gram: "1",
max_gram: "40"
}
}
},
Run Code Online (Sandbox Code Playgroud)
我将“ autoComplete”用作索引分析器,将“ caseInsensitive”用作搜索分析器
编辑:
我使用NGramTokenizer以便能够搜索部分单词
实词示例:
Title: 'Huge 48" Bowtie LED Opti neon wall sign. 100,000 hours Bar lamp …Run Code Online (Sandbox Code Playgroud)