在弹性搜索查询中转义特殊字符
escape special character in elasticsearch query
我的问题很简单,我不能在搜索查询中使用@。最后,我发现我可以使用反斜杠对特殊字符进行转义。
GET index/_search
{
"size": 20,
"query": {
"query_string": {
"query": "\@as",
"analyzer": "keyword"
}
}
}
但是当我尝试这样做时,出现了以下错误 Unrecognized character escape '@' (code 64)\n at
。当我尝试不使用 @ 符号时,我得到了没有 @ 符号的结果,例如
- 一如既往的怀念
- 作为。界面
- 好像
等等。谁能建议我如何才能按照我的期望执行之前的查询?
我正在使用
- 弹性搜索 2.4.1
- Ubuntu 14.04
- Kibana 4.6.1
您收到错误是因为不需要转义“@”字符。
"query": "@as"
应该可以。
您还应该检查您的映射,如果您的字段未标记为 not_analyzed
(或没有 keyword
分析器),您将看不到任何搜索结果 - 标准分析器会删除像“@”这样的字符索引文档时。
更新
query_string
默认使用 _all
字段,因此您必须按照类似于此示例的方式配置此字段:
PUT index
{
"mappings":{
"book":{
"_all":{
"type":"string",
"index":"analyzed",
"analyzer":"whitespace"
},
"properties":{
"name":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
PUT /index/book/1
{
"name" : "@foo bar"
}
GET index/_search
{
"size": 20,
"query": {
"query_string": {
"query": "@foo",
"analyzer": "keyword"
}
}
}
我的问题很简单,我不能在搜索查询中使用@。最后,我发现我可以使用反斜杠对特殊字符进行转义。
GET index/_search
{
"size": 20,
"query": {
"query_string": {
"query": "\@as",
"analyzer": "keyword"
}
}
}
但是当我尝试这样做时,出现了以下错误 Unrecognized character escape '@' (code 64)\n at
。当我尝试不使用 @ 符号时,我得到了没有 @ 符号的结果,例如
- 一如既往的怀念
- 作为。界面
- 好像 等等。谁能建议我如何才能按照我的期望执行之前的查询?
我正在使用
- 弹性搜索 2.4.1
- Ubuntu 14.04
- Kibana 4.6.1
您收到错误是因为不需要转义“@”字符。
"query": "@as"
应该可以。
您还应该检查您的映射,如果您的字段未标记为 not_analyzed
(或没有 keyword
分析器),您将看不到任何搜索结果 - 标准分析器会删除像“@”这样的字符索引文档时。
更新
query_string
默认使用 _all
字段,因此您必须按照类似于此示例的方式配置此字段:
PUT index
{
"mappings":{
"book":{
"_all":{
"type":"string",
"index":"analyzed",
"analyzer":"whitespace"
},
"properties":{
"name":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
PUT /index/book/1
{
"name" : "@foo bar"
}
GET index/_search
{
"size": 20,
"query": {
"query_string": {
"query": "@foo",
"analyzer": "keyword"
}
}
}