elasticsearch 按一个字母搜索
我有一个如下设置的索引:
elasticsearch 按一个字母搜索,
elasticsearch,
elasticsearch,我有一个如下设置的索引: settings: { index.analysis.analyzer.eng_search_analyzer.filter.0: lowercase index.analysis.analyzer.eng_search_analyzer.filter.1: icu_folding index.analysis.analyzer.eng_search_analyzer.char_filter.0: html_strip index.analysis.filter.eng
settings: {
index.analysis.analyzer.eng_search_analyzer.filter.0: lowercase
index.analysis.analyzer.eng_search_analyzer.filter.1: icu_folding
index.analysis.analyzer.eng_search_analyzer.char_filter.0: html_strip
index.analysis.filter.eng_ngram_filter.type: nGram
index.analysis.filter.eng_ngram_filter.min_gram: 1
index.analysis.analyzer.eng_search_analyzer.tokenizer: whitespace
index.analysis.analyzer.eng_search_analyzer.filter.2: icu_normalizer
index.analysis.analyzer.eng_index_analyzer.filter.1: eng_ngram_filter
index.analysis.analyzer.eng_index_analyzer.filter.0: lowercase
index.number_of_shards: 2
index.analysis.filter.eng_ngram_filter.token_chars.1: digit
index.analysis.filter.eng_ngram_filter.token_chars.0: letter
index.analysis.filter.eng_ngram_filter.token_chars.3: symbol
index.analysis.filter.eng_ngram_filter.token_chars.2: punctuation
index.analysis.analyzer.eng_index_analyzer.type: custom
index.analysis.analyzer.eng_index_analyzer.char_filter.0: html_strip
index.analysis.analyzer.eng_index_analyzer.filter.3: icu_normalizer
index.analysis.filter.eng_ngram_filter.max_gram: 20
index.analysis.analyzer.eng_index_analyzer.filter.2: icu_folding
index.number_of_replicas: 1
index.analysis.analyzer.eng_index_analyzer.tokenizer: whitespace
index.analysis.analyzer.eng_search_analyzer.type: custom
index.version.created: 900799
index.uuid: -O-iV6ZIQh6gk1204Ec1ig
}
{
"name": {
"type": "multi_field",
"fields": {
"name": {
"type": "string",
"index": "not_analyzed",
"omit_norms": "true",
"index_options": "docs",
"null_value": ""
},
"analyzed": {
"type": "string",
"index_analyzer": "eng_index_analyzer",
"search_analyzer": "eng_search_analyzer",
"null_value": "",
"include_in_all": "false"
}
}
}
}
几个重要字段的字段映射设置如下:
settings: {
index.analysis.analyzer.eng_search_analyzer.filter.0: lowercase
index.analysis.analyzer.eng_search_analyzer.filter.1: icu_folding
index.analysis.analyzer.eng_search_analyzer.char_filter.0: html_strip
index.analysis.filter.eng_ngram_filter.type: nGram
index.analysis.filter.eng_ngram_filter.min_gram: 1
index.analysis.analyzer.eng_search_analyzer.tokenizer: whitespace
index.analysis.analyzer.eng_search_analyzer.filter.2: icu_normalizer
index.analysis.analyzer.eng_index_analyzer.filter.1: eng_ngram_filter
index.analysis.analyzer.eng_index_analyzer.filter.0: lowercase
index.number_of_shards: 2
index.analysis.filter.eng_ngram_filter.token_chars.1: digit
index.analysis.filter.eng_ngram_filter.token_chars.0: letter
index.analysis.filter.eng_ngram_filter.token_chars.3: symbol
index.analysis.filter.eng_ngram_filter.token_chars.2: punctuation
index.analysis.analyzer.eng_index_analyzer.type: custom
index.analysis.analyzer.eng_index_analyzer.char_filter.0: html_strip
index.analysis.analyzer.eng_index_analyzer.filter.3: icu_normalizer
index.analysis.filter.eng_ngram_filter.max_gram: 20
index.analysis.analyzer.eng_index_analyzer.filter.2: icu_folding
index.number_of_replicas: 1
index.analysis.analyzer.eng_index_analyzer.tokenizer: whitespace
index.analysis.analyzer.eng_search_analyzer.type: custom
index.version.created: 900799
index.uuid: -O-iV6ZIQh6gk1204Ec1ig
}
{
"name": {
"type": "multi_field",
"fields": {
"name": {
"type": "string",
"index": "not_analyzed",
"omit_norms": "true",
"index_options": "docs",
"null_value": ""
},
"analyzed": {
"type": "string",
"index_analyzer": "eng_index_analyzer",
"search_analyzer": "eng_search_analyzer",
"null_value": "",
"include_in_all": "false"
}
}
}
}
当我查询name.analysisted字段时,它适用于至少包含两个字符的任何内容。例如,查询“Ra”将在名称字段中找到带有“Rafael”的文档。然而,当我查询“R”或“Rafael S”时,它不会返回任何结果。应该注意的是,在我们的查询中,空格被处理为“AND”操作符,而不是“OR”,因此基本上查询词被处理为“name contains[search term]”
如何配置字段或分析器,以便搜索单个字母可以正常工作?很难说没有看到查询,但根据a,如果使用查询,可以通过增加查询的“max\u expansions”属性获得一些成功,尽管这会降低速度
“最大扩展数”:10000
该线程中的另一个潜在解决方案是将操作符
或默认操作符
设置为”和“
(我认为您已经完成了)