映射
"isValid" : {
"type" : "boolean"
},
"lName" : {
"type" : "text"
},
"mname" : {
"type" : "keyword"
}
数据
"isValid" : true
"lName" : "John scena",
"mname" : "prod"
查询(匹配)
{
"query": {
"match" : {
"lName" : "John scena"
}
}
}
It gives me no result but,
{
"query": {
"match" : {
"mname" : "prod"
}
}
}
this gives me proper result
查询(字词)
{
"query":{
"term":{"lName":"John scena"}
}
}
This will also not give any response.
我的问题:
查询?
类型?
TIA。
最佳答案
在Elasticsearch中,文档被反向索引。对于反向索引,我们需要正确地分割字符串。为此,我们在elasticsearch中有分析器。因此,默认情况下,在编制索引时,它将“john scena”分为“john”和“scena”,并且它们将指向同一文档。因此,您尝试索引“john scena”,但将其索引为“john”,“scena”。您可以通过创建自定义分析仪来更改分析仪的行为。
现在,每个索引都具有搜索分析器,该分析器说明如何在搜索时分析搜索词。默认情况下,它与索引时间分析器具有相同的值。当我们进行字词查询时,它说不要分析我的搜索字词。而比赛说在搜索之前先分析我。当您为“john scena”建立索引时,它会被索引为“john”,“scena”。您正在尝试使用“john scena”进行词条查询的答案,但不会匹配。由于字词查询会阻止ES分析“john scena”,因此它将查找完全匹配。但是索引的值是“john”,“scena”。因此,您将不会获得任何匹配。如果出现匹配查询,您的搜索字词也会分为“john”和“scena”,并且您会获得匹配。有关更多详细信息,请参阅文档,它有很好的示例。
从ES 5开始,默认情况下,我们具有关键字字段以具有确切值。如果您确切知道要搜索的内容,则可以使用术语查询。但是要小心,因为精确意味着准确,即使大小写不同也不会导致命中。
关于elasticsearch - 字词查询未给出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43796689/