我想说我在索引中创建了这个文档:
put /nursery/rhyme/1
{
"url" : "http://example.com/mary",
"text" : "Mary had a little lamb"
}
为什么此查询不返回任何内容?
POST /nursery/rhyme/_search
{
"query" : {
"match_all" : {}
},
"filter" : {
"term" : {
"url" : "http://example.com/mary"
}
}
}
答案 0 :(得分:0)
Term Query查找包含倒排索引中指定的确切术语的文档。保存文档时,url属性为analyzed
,它将生成以下术语(使用默认分析器):[http,example,com,mary]。
所以你现在对你的倒排索引是一堆术语,不是它们是http://example.com/mary
。
你想要的是not analyze url属性或者Match Query,它会将查询拆分成条件,就像索引一样。
答案 1 :(得分:0)
完全匹配不适用于analyzed
字段。默认情况下,字符串为analyzed
,这意味着http://example.com/mary
字符串将被分割并存储在reverse index
中http
,example
,com
,{{ 1}}。这就是你的查询没有输出的原因。
您可以设置字段mary
not analyzed
但为此您必须重新索引索引。
在这里研究not_analyzed和term query。
希望这有帮助
答案 2 :(得分:0)
在 ElasticSearch 7.x 中,您必须在映射属性中使用类型“关键字”,该类型未解析 https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html