【发布时间】:2021-06-28 20:38:41
【问题描述】:
我正在尝试使用以下分析器在弹性 serach 7.1 中实现部分子字符串搜索
PUT my_index-001
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "whitespace",
"filter": [
"lowercase",
"autocomplete"
]
},
"autocomplete_search": {
"tokenizer": "whitespace",
"filter": [
"lowercase"
]
}
},
"filter": {
"autocomplete": {
"type": "nGram",
"min_gram": 2,
"max_gram": 40
}
}
}
},
"mappings": {
"doc": {
"properties": {
"title": {
"type": "string",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
}
之后我尝试将一些示例数据添加到 my_index-001 并输入 doc
PUT my_index-001/doc/1
{
"title": "ABBOT Series LTD 2014"
}
PUT my_index-001/doc/2
{
"title": "ABBOT PLO LTD 2014A"
}
PUT my_index-001/doc/3
{
"title": "ABBOT TXT"
}
PUT my_index-001/doc/4
{
"title": "ABBOT DMO LTD. 2016-II"
}
用于执行部分搜索的查询:
GET my_index-001/_search
{
"query": {
"match": {
"title": {
"query": "ABB",
"operator": "or"
}
}
}
}
我期待分析器的以下输出
-
如果我输入 ABB,我应该得到 docid 1,2,3,4
-
如果我输入 ABB 2014 我应该得到 docid 1,2
-
如果我输入 ABBO PLO 我应该得到 doc 2
-
如果我输入 TXT,我应该得到 doc 3
使用上述分析器设置,我没有得到预期的结果。 如果我在弹性搜索的分析器设置中遗漏任何内容,请告诉我
【问题讨论】:
标签: elasticsearch