elasticsearch - 字词查询未给出正确的结果

标签 elasticsearch restlet elasticsearch-query

映射

      "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/

    相关文章:

    elasticsearch - 在服务器上安装 Elasticsearch 但如果从另一台机器无法连接到它

    java - 用于测试 Servlet 部署的 RESTful Web 服务的 JSP 客户端

    elasticsearch - 弹性transport_request超过限制

    elasticsearch - elasticdump无法从文件导入数据

    elasticsearch - 自动完成 "smart"

    jaxb - 什么是 JAXB 和 JAXRS?它们有什么关系?

    elasticsearch - 查询包含嵌套数组 Elasticsearch 中所有值的文档

    python - 如何合并两个DSL查询以进行聚合和过滤

    elasticsearch - 在 Elasticsearch 中按分数排序复合聚合结果

    java - 使用 ReSTLet 进行过滤的正确方法