术语查询不使用';不能给出正确的结果
映射术语查询不使用';不能给出正确的结果,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,映射 "isValid" : { "type" : "boolean" }, "lName" : { "type" : "text" }, "mname" : { "type" : "keyword" } 数据 "isValid" : true "lName" : "John scena", "mname" : "p
"isValid" : {
"type" : "boolean"
},
"lName" : {
"type" : "text"
},
"mname" : {
"type" : "keyword"
}
数据
"isValid" : true
"lName" : "John scena",
"mname" : "prod"
查询(匹配)
它没有给我任何结果,但是
这给了我正确的结果
查询(术语)
这也不会给出任何回应
我的问题是:
TIA。
lName
必须是关键字
类型,才能使您的术语
查询匹配。如果它是文本
,则将对其进行分析,从而将其拆分为多个术语
而term
查询将与您给它的文本完全匹配
解决方案是将映射更改为:
"lName" : {
"type" : "text"
}
“术语”、“匹配”、“匹配短语”查询之间有什么不同
这两者之间最大的区别在于术语
不分析作为搜索文本接收的文本,而其他两个将进行分析
“关键字”、“文本”、“字符串”之间有什么不同?它对查询有什么影响
文本
以及与索引一起使用的字符串
:“分析的”
(或默认值)将在索引时分析文本,并可能将文档中的文本拆分为多个术语。
关键字
或带有索引的字符串
:“未分析”
选项在索引时不会触及文本,并且对于单个文档,该值只有一个术语被索引
你的问题都是基本的,文档很好地涵盖了这些问题。我强烈建议查阅以下文件:
在elasticsearch中,文档被反向索引。对于反向索引,我们需要正确分割字符串。为此,我们在弹性搜索中使用了分析器。因此,默认情况下,在索引时,它会将“john scena”拆分为“john”和“scena”,它们将指向同一个文档。因此,您试图索引“john scena”,但它被索引为“john”,“scena”。您可以通过创建自定义分析仪来更改分析仪的行为
现在每个索引都有搜索分析器,它说明了在搜索时应该如何分析搜索词。默认情况下,它与索引时间分析器具有相同的值。当我们进行术语查询时,它说不要分析我的搜索术语。而match说在搜索之前先分析我。当您索引“john scena”时,它会被索引为“john”,“scena”。如果您试图使用“john scena”进行术语查询,则它将不匹配。因为术语查询停止了ES对“john scena”的分析,所以它会寻找精确匹配。但是索引的值是“john”、“scena”。所以你不会得到任何匹配。在匹配查询中,您的搜索词也被分为“john”和“scena”,您会得到匹配结果。有关更多详细信息,请参阅文档,其中有很好的示例
在ES 5中,默认情况下,关键字字段具有精确的值。如果您确切知道要搜索的内容,可以使用术语查询。但是要小心,因为“精确”意味着“精确”,即使大小写差异也会导致找不到匹配项。@Val请帮助我,如果可能,请给出答案!您的
术语查询在哪里?我们只能看到匹配查询。你也可以分享术语查询吗?@avr我忘了在这里提到,我有编辑que。我知道术语查询会完全匹配,但为什么它不会发生在我的案例中?因为,正如我在回答中所说,lName
需要是关键字而不是文本。但是为什么呢?请参阅我在问题末尾提到的问题。更新了我的答复。正如我在最后一段中所说的,你真的需要检查一下文档。他们比我更善于解释这些基本问题。祝你好运谢谢你的尝试@andrestefan谢谢@krrish@DivyeshGausvami :)
{
"query": {
"match" : {
"mname" : "prod"
}
}
}
{
"query":{
"term":{"lName":"John scena"}
}
}
"lName" : {
"type" : "text"
}