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”的人,为什么这不起作用?
答案 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"
}
}
]
}
}
}