1

映射

      "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. “术语”,“匹配”,“匹配短语”查询之间有什么不同。
  3. “关键字”、“文本”、“字符串”有什么区别?它影响查询?
  4. 什么是日期数据类型格式,我们可以以哪种格式保存数据?

TIA。

4

2 回答 2

2

在弹性搜索中,文档是反向索引的。对于反向索引,我们需要正确拆分字符串。为此,我们在 elasticsearch 中有分析器。因此,默认情况下,在索引时它将“john scena”拆分为“john”和“scena”,它们将指向同一个文档。所以你试图索引“john scena”,但它被索引为“john”,“scena”。您可以通过创建自定义分析器来更改分析器的行为。

现在每个索引也有搜索分析器,它说明在搜索时应该如何分析搜索词。默认情况下,它与索引时间分析器具有相同的值。当我们进行术语查询时,它说不要分析我的搜索词。虽然匹配说在搜索之前分析我。当您为“john scena”编制索引时,它被索引为“john”、“scena”。Ans 您尝试使用“john scena”进行术语查询,它将不匹配。因为 term 查询阻止 ES 分析“john scena”,所以它寻找完全匹配。但是被索引的值是“john”、“scena”。所以你不会得到任何匹配。在匹配查询的情况下,您的搜索词也分为“john”和“scena”,您会得到命中。有关更多详细信息,请参阅文档,它有很好的示例。

从 ES 5 开始,我们默认有关键字字段以具有精确值。如果您确切知道要搜索的内容,则可以使用术语查询。但是要小心,因为精确意味着精确,即使大小写不同也会导致找不到匹配项。

于 2017-05-05T07:57:01.453 回答
1

lName需要keyword为您的term查询匹配的类型。如果它text是你所拥有的,它将被分析并因此分成多个术语。

并且term查询将与您提供给它的文本完全匹配。

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

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

“术语”,“匹配”,“匹配短语”查询之间有什么不同。

它们之间最大的区别term是不分析作为搜索文本接收到的文本,而其他两个会。

“关键字”、“文本”、“字符串”有什么区别?它影响查询?

text以及string"index": "analyzed"(或默认)一起使用将在索引时分析文本,并可能将文档中的文本拆分为多个术语。 keywordstringwith"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

于 2017-05-05T06:52:00.383 回答