我在 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
视为单独的术语.
我应该更改映射吗?查询?
最佳答案
Query_string 查询有一组需要转义的保留字符。
query_string : Read the reserved characters section
所以要搜索
'A&B' (or) 'A&B Corp' (or) 'A&B....'
Your query must be "A&B\\*" such that the query_string parser treats it as a * wildcard operator.
当前您的查询正在搜索完全匹配的 “A&B*”它希望 asterik 成为您数据的一部分。
当您搜索 "A&B *" 时,空格是保留的 性格所以它 现在搜索“A&B”(或)“*”,因此您在此得到匹配 案例。
关于elasticsearch - 如何处理 ElasticSearch 字段中的标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32855871/