我在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字段的映射如下所示:
```java
"name": {
"type": "string"
},
但是,我没有结果 . 查询结构适用于字段中没有 &
的文档,所以我很确定这是问题的一部分 .
但是,我不确定如何处理这个问题 . 我很确定我仍然想分析该字段进行全文搜索 .
另外,如果我在查询中的 *
之前添加一个空格(即 "query": "A&B *",
),那么我得到的结果包括 A&B
,所以我不认为它只是丢弃&符号并将 A
和 B
视为单独的术语 .
我应该改变我的映射吗?查询?
1 回答
Query_string查询具有一组需要转义的保留字符 .
query_string : Read the reserved characters section
所以要搜索
当前您的查询正在搜索 "A&B"* 的完全匹配时,它希望asterik成为您数据的一部分 .
当你搜索 "A&B " 时,空格是一个保留字符,所以它现在正在搜索"A&B"(或)"",因此在这种情况下你得到一个匹配 .