在DSL中使用AND查询的Elasticsearch

时间:2017-04-20 09:52:24

标签: elasticsearch

这让我发疯了。我不知道为什么这个弹性搜索没有给我回报价值。 我把价值放在这个:

PUT /customer/person-test/1?pretty
{
  "name": "John Doe",
   "personId": 153,
   "houseHoldId": 6191136,
   "quarter": "2016_Q1"
}

PUT /customer/person-test/2?pretty
{
  "name": "John Doe",
   "personId": 153,
   "houseHoldId": 6191136,
   "quarter": "2016_Q2"
}

当我这样查询时,它不会返回值:

GET /customer/person-test/_search
{
  "query": {
    "bool": {
        "must" : [
          {
           "term": {
             "name": "John Doe"
           }
         },
         {
           "term": {
             "quarter": "2016_Q1"
           }
         }
       ]
     }
   }
}

我从A simple AND query with Elasticsearch

复制了这个查询

我只是想找到“John Doe”和“2016_Q1”的人,为什么这不起作用?

2 个答案:

答案 0 :(得分:3)

您应该使用match代替term

GET /customer/person-test/_search
{
  "query": {
    "bool": {
        "must" : [
          {
           "match": {
             "name": "John Doe"
           }
         },
         {
           "match": {
             "quarter": "2016_Q1"
           }
         }
       ]
     }
   }
}

<强>解释

  

Why doesn’t the term query match my document ?

     

字符串字段可以是文本类型(视为全文,如正文)   (电子邮件)或关键字(视为确切的值,如电子邮件   地址或邮政编码)。确切的值(如数字,日期和   关键字)具有在添加到的字段中指定的确切值   反向索引,以使它们可搜索。

     

但是,会分析文本字段。这意味着他们的价值观   首先通过分析仪生成一个术语列表   然后加入倒排索引。

     

分析文本的方法有很多种:默认的标准分析器   删除大多数标点符号,将文本分解为单个单词,以及   小例子。例如,标准分析仪会转动   字符串“Quick Brown Fox!”中的字词[quick,brown,fox]。

     

此分析过程可以搜索单个单词   在一大块全文中。

     

术语查询在字段的倒置中查找确切的术语   index - 它对该字段的分析器一无所知。这个   使其在关键字字段或数字中查找值非常有用   或日期字段。查询全文字段时,请使用匹配查询   相反,它了解该领域的分析方式。   ...

答案 1 :(得分:2)

由于您使用默认标准分析器link来识别&#39;和&#39;季度&#39;

您还有两个选择: -

1)改变映射: -

  "name": {
    "type": "string",
    "index": "not_analyzed"
  },
  "quarter": {
    "type": "string",
    "index": "not_analyzed"
  }

2)试试这个,小写你的值,因为默认标准分析器使用小写令牌过滤器: -

{
  "query": {
    "bool": {
        "must" : [
          {
           "term": {
             "name": "john_doe"
           }
         },
         {
           "term": {
             "quarter": "2016_q1"
           }
         }
       ]
     }
   }
}