我正在使用弹性搜索number: "1.5.2"
,我正在尝试实现edge_ngram自动完成搜索。我有以下映射:
curl -XPUT 'localhost:8080/users' -d '{
"settings": {
"analysis": {
"filter": {
"edge_ngram_filter": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10
}
},
"analyzer": {
"edge_ngram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding",
"edge_ngram_filter"
]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
},
"mappings": {
"user": {
"_all": {
"type":"string",
"index_analyzer": "edge_ngram_analyzer",
"search_analyzer": "whitespace_analyzer"
},
"properties": {
"id":{
"type": "integer",
"index": "no",
"include_in_all":false
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
}
}
}
}
}'
然后我将“用户”文档编入索引:
curl -XPUT 'localhost:8080/users/user/1' -d '{
"email": "a.smith@gmail.com",
"firstName": "Alexander",
"lastName": "Smith"
}'
当我运行以下查询时,不会返回任何内容:
curl -XGET 'localhost:8080/users/_search' -d '{
"query": {
"match":{
"_all":{
"query": "ale",
"operator":"and"
}
}
}
}'
为什么_all匹配查询在用户文档上不匹配?
答案 0 :(得分:2)
您可以通过edge_ngram实现自动填充功能,而无需覆盖_all
字段分析。这是通过将您定义的分析器的名称更改为default_index
和default_search
来完成的(如果您使用alias它们可以反映您的原始名称(“edge_ngram_analyzer”和“whitespace_analyzer”)想)。以下是您的配置以及相关更改:
curl -XPUT 'localhost:8080/users' -d '{
"settings": {
"analysis": {
"filter": {
"edge_ngram_filter": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10
}
},
"analyzer": {
"default_index": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding",
"edge_ngram_filter"
]
},
"default_search": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
},
"mappings": {
"user": {
"properties": {
"id":{
"type": "integer",
"index": "no",
"include_in_all":false
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
}
}
}
}
}'
希望我能帮助:)