术语查询未提供正确结果

时间:2017-05-05 04:44:53

标签: 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"
        }
    }
}
  

它没有给我任何结果,但

   {
        "query": {
            "match" : {
                "mname" : "prod"
            }
        }
    }
  

这给了我正确的结果

查询(期限)

{
   "query":{
      "term":{"lName":"John scena"}
   }
}
  

这也不会给出任何回应。

我的问题:

  1. 为什么会这样?请给出正确的解决方案!
  2. “term”,“match”,“match phrase”查询之间有何不同。
  3. “关键字”,“文字”,“字符串”之间有什么不同?它会影响到 查询?
  4. 什么是日期数据类型格式以及我们可以在哪种格式中保存数据 类型?
  5. TIA。

2 个答案:

答案 0 :(得分:2)

在elasticsearch文档中反转索引。对于反向索引,我们需要正确地拆分字符串。为此我们在elasticsearch中有分析器。因此,默认情况下,在编制索引时,它会拆分" john scena"进入"约翰"和" scena"他们将指向同一份文件。所以你试图索引" john scena",但它被索引为" john"," scena"。您可以通过创建自定义分析器来更改分析器的行为。

现在每个索引都有搜索分析器,它说明了如何在搜索时分析搜索词。默认情况下,它与索引时间分析器具有相同的值。当我们进行术语查询时,它表示不会分析我的搜索词。虽然匹配说在搜索之前分析我。当你索引" john scena"时,它被索引为" john"," scena"。你正试图用" john scena"进行术语查询,它将不匹配。因为术语查询会阻止ES分析" john scena",所以它会查找完全匹配。但索引的值是" john"," scena"。所以你不会得到任何匹配。如果是匹配查询,您的搜索字词也会分成" john"和" scena"你得到了点击率。有关更多详细信息,请参阅文档,它有很好的示例。

从ES 5开始,默认情况下我们有关键字字段具有确切的值。如果您确切知道要搜索的内容,则可以使用术语查询。但要小心,因为确切的意思是确切的,即使案例差异也会导致没有找到命中。

答案 1 :(得分:1)

lName必须属于keyword类型才能使term查询匹配。如果它是text,则会对其进行分析,从而分成多个术语。

term查询将完全与您提供的文字相匹配。

解决方案是将映射更改为:

  "lName" : {
    "type" : "text"
  }
  

“term”,“match”,“match phrase”查询之间有何不同。

这些之间最大的区别是term没有分析作为搜索文本收到的文本,而另外两个会分析。

  

“关键字”,“文字”,“字符串”之间有什么不同?它会影响查询吗?

text以及与string一起使用的"index": "analyzed"(或默认值)将在索引时分析文本,并可能将文档中的文本拆分为多个术语。 带keyword选项的string"index":"not_analyzed"将不会在索引编制时触及文本,并且只有一个术语为单个文档的索引编制索引。

您的问题是基本问题,文档非常擅长涵盖这些问题。我强烈建议您查看以下文档: https://www.elastic.co/guide/en/elasticsearch/guide/master/term-vs-full-text.html https://www.elastic.co/guide/en/elasticsearch/reference/5.4/text.html https://www.elastic.co/guide/en/elasticsearch/reference/5.4/keyword.html https://www.elastic.co/guide/en/elasticsearch/guide/master/match-query.html