是否可以使用前缀通配符查询(其中*ing
可以通过简单查询字符串查询找到frustrating
?
Query String Query似乎可以使用allow_leading_wildcard
参数(默认为true
),但是Simple Query String Query中没有提到前缀通配符,并且尝试时,前缀通配符查询似乎不起作用。
答案 0 :(得分:0)
如果您确实希望通过wildcard
进行Simple Query String Query
搜索,则可以使用edge_ngram
标记程序创建自己的一个。
示例:
映射
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "my_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"my_tokenizer": {
"min_gram": "2",
"type": "ngram",
"max_gram": "3"
}
}
}
},
"mappings": {
"properties": {
"data": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
为文档编制索引
PUT my_index/_doc/1
{
"data": "frustrating"
}
搜索查询
GET my_index/_search
{
"query": {
"simple_query_string": {
"query": "ing",
"fields": ["data"]
}
}
}
结果
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.8630463,
"_source" : {
"data" : "frustrating"
}
}
]
另一种解决方案是使用query_string
(allow_leading_wildcard
默认为true),并且您在映射中不需要analyzer字段:
GET my_index/_search
{
"query": {
"query_string": {
"query": "*ing",
"fields": ["data"]
}
}
}
希望这会有所帮助