我正在对弹性搜索(1.7)进行一般搜索,除了我的帐号中有正斜杠之外,一切都很好.帐号字段不是id字段,并且是"not_analyzed".
如果我搜索一个帐号,例如AC/1234/A01,那么我会得到数千个结果,大概是因为它正在进行正则表达式搜索(?).
{
"query" : { "query_string" : {"query" : "AC/1234/A01"} }
}
Run Code Online (Sandbox Code Playgroud)
我可以通过完全匹配搜索获得我想要的结果
{
"query" : { "query_string" : {"query" : "\"AC/1234/A01\""} }
}
Run Code Online (Sandbox Code Playgroud)
这实际上给了我想要的结果,可能会将该法案作为备份选项(围绕所有"单词"搜索引号).但是,我在想,如果他们进行多字搜索,包括帐号,我会回到数千个结果,虽然我看不到该搜索的价值,但我想避免它发生.
基本上我有一个java应用程序查询弹性搜索,我想逃避在GUI中输入的所有正斜杠.
我的谷歌搜索告诉我
{
"query" : { "query_string" : {"query" : "AC\\/1234\\/A01"} }
}
Run Code Online (Sandbox Code Playgroud)
应该这样做,但它没有任何区别,查询有效,但我仍然得到数千个结果.
有人能指出我正确的方向吗?
Val*_*Val 12
只需为查询字符串指定keyword分析器,就可以获得所需的内容而无需转义任何内容,如下所示:
{
"query" : {
"query_string" : {
"query" : "AC\\/1234\\/A01",
"analyzer": "keyword" <---- add this line
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果不这样做,则使用标准分析器(并将对您的查询字符串进行标记),无论您的字段类型是什么,或者是否是not_analyzed.
| 归档时间: |
|
| 查看次数: |
16798 次 |
| 最近记录: |