我在Elastic Search中存储了一个文档中的字段,我希望将其作为全文字段进行分析。在一种情况下,它包含name
字段的值,如下所示:
A&B Corp
我希望能够使用这样的查询在文档中搜索自动完成窗口小部件(假设用户在自动填充字段中键入A&B
)。目的是将包含任何术语的文档与键入的前缀匹配。
{ "query": {
"filtered": {
"query": {
"query_string": {
"query": "A&B*",
"fields": [
"firstName",
"lastName",
"name",
"key",
"email"
]
}
},
"filter": {
"terms": {
"environmentId": [
"foo"
]
}
}
}
}
}
```
我对名称字段的映射如下所示:
"name": {
"type": "string"
},
但是,我没有结果。查询结构适用于在该字段中没有&
的文档,因此我非常确定这是问题的一部分。
但是,我不确定如何处理这个问题。我很确定我仍然想分析该字段进行全文搜索。
此外,如果我在查询中*
之前添加空格(即"query": "A&B *",
),那么我会得到包含A&B
的结果,所以我不会想想它只是丢弃&符号并将A
和B
视为单独的术语。
我应该更改我的映射吗?查询?
答案 0 :(得分:2)
Query_string查询有一组需要转义的保留字符。
query_string : Read the reserved characters section
所以要搜索
'A& B'(或)'A& B Corp'(或)'A& B ....'
您的查询必须是“A& B \\ *”,以便query_string解析器处理 它作为*通配符运算符。
目前您的查询正在搜索完全匹配 “A& B *”它希望asterik成为您数据的一部分。
当您搜索“A& B *”时,空格是保留的 性格如此 现在搜索“A& B”(或)“*”,因此你得到一个匹配 情况下。