es中有这么一篇文档:
{
"_index": "xsq_tickets.v1",
"_type": "xsq_tickets",
"_id": "85336",
"_version": 1,
"found": true,
"_source": {
"actCode": "20170906004",
"leftQuantity": 18,
"leftSeatNo": "",
"priceMethod": 1,
"priceSecSort": 12986,
"priceUnit": "张",
"pubDatetime": "2017-09-06 16:42:17",
"quantity": 18,
"remark": "",
"reviewDatetime": "0000-00-00 00:00:00",
"rows": "",
"salerType": 2,
"seatNo": "",
"ticketsFeature": "",
"ticketsId": 85336
}
}
如果我的查询条件是:
{
"query":{
"bool":{
"must":[
{
"term":{
"ticketsId":85336
}
}
]
}
}
}
那么可以匹配到上面这篇文档,但是我现在想把字段 rows
为空的结果过滤掉:
{
"query":{
"bool":{
"must":[
{
"term":{
"ticketsId":85336
}
}
],
"must_not": [
{
"term":{
"rows":""
}
}
]
}
}
}
我多加了一个must_not过滤掉rows
为空的文档,但是似乎没有效果,依然会返回上面的那篇文档,我这么写是哪里有问题么?正确的写法应该是什么样的,求教
最终这问题还是被解决了,之前设置索引的mapping的时候rows字段类型为text,默认会被分词,后来重建了索引,修改了mapping将原来text的类型改成了keyword,这样rows字段就不会被分词器分词,就可以实现精准查询了,修改了mapping之后,上面的查询语句就生效了。
这个周末抽个时间好好深入研究下这个问题