我在弹性搜索中的输入是这样的:
输入:
curl -XPUT "http://localhost:9200/movies/movie/4" -d'
{
"uid": "a-b"
}'
询问 :
curl -XGET "http://localhost:9200/movies/movie/_search" -d '
{
"query" : {
"term" : { "uid": "a-b" }
}
}'
输出:
{"took":2,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}
谢谢
这完全取决于您使用的分析仪。
使用标准分析器,您可以看到已经生成了两个令牌,并且忽略了“-”。
curl -XGET 'localhost:9200/myindex/_analyze?analyzer=standard&pretty' -d 'a-b'
{
"tokens" : [ {
"token" : "a",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "b",
"start_offset" : 2,
"end_offset" : 3,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}
在空白分析器中,“-”被视为数据,您只能为数据获取一个令牌:
curl -XGET 'localhost:9200/myindex/_analyze?analyzer=whitespace&pretty' -d 'a-b'
{
"tokens" : [ {
"token" : "a-b",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 1
} ]
}
当您使用术语查询时,不会对搜索查询进行任何分析。因此,您可能正在尝试将“ ab”与“ a”和“ b”进行匹配(假设您在映射中使用了标准分析器)-即,它将不匹配并且不会返回结果。
如果您在查询中使用match或query_string,那么您的搜索可能会起作用,因为将对搜索字符串进行分析。即ES会尝试将“ a”和“ b”与包含“ a”和“ b”的字段进行匹配-这将是成功的匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句