我在弹性搜索中的条目是这样的:
输入:
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":[]}}
谢谢
答案 0 :(得分:3)
完全取决于您使用的分析仪。
使用标准分析仪,您可以看到已生成两个令牌,并且" - "被忽略了。
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
} ]
}
使用空白分析仪&#34; - &#34;被视为数据,您只能为您的数据获取一个令牌:
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
} ]
}
使用 term 查询时,不会对搜索查询进行分析。 所以你可能想要匹配&#34; a-b&#34;反对&#34; a&#34;和&#34; b&#34; (假设您在映射中使用了标准分析器) - 即它不匹配并且不会返回结果。
如果您在查询中使用了匹配或 query_string ,则搜索可能会起作用,因为搜索字符串已被分析。 即ES会尝试匹配&#34; a&#34;和&#34; b&#34;对包含&#34; a&#34;的字段和&#34; b&#34; - 这将是一场成功的比赛。