【发布时间】:2015-10-31 17:59:43
【问题描述】:
我能够获取以下弹性搜索查询的数据:
{
"query": {
"filtered": {
"query": [],
"filter": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"term": {
"gender": "malE"
}
},
{
"term": {
"sentiment": "positive"
}
}
]
}
}
]
}
}
}
}
}
但是,如果我使用“匹配”进行查询 - 我会收到带有 400 状态响应的错误消息
{
"query": {
"filtered": {
"query": [],
"filter": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"gender": "malE"
}
},
{
"term": {
"sentiment": "positive"
}
}
]
}
}
]
}
}
}
}
}
嵌套布尔过滤器不支持匹配查询吗?
由于术语查询在字段的倒排索引中查找确切的术语,并且我想将性别数据查询为不区分大小写的字段 - 我应该尝试哪种方法?
索引设置:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"analyzer_keyword": {
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
}
}
字段性别映射:
{"type":"string","analyzer":"analyzer_keyword"}
【问题讨论】:
-
如果您花费太多时间,索引小写属性可能会更容易
-
@johnSmith 我没听懂你。你的意思是我应该在通过术语查询搜索之前将属性设为小写?
-
我的意思是你很可能索引对象并有一个用于弹性搜索的映射,你可以简单地向你的对象类添加一个属性和一个 getter 函数来返回小写名称,将此字段添加到弹性映射和你没有问题
-
我认为清理将被索引的字段是有意义的,因此最终应该触及 searchenginge 的整体性能
-
谢谢。我正在清理该字段并在搜索之前将术语小写(例如:{“term”:{“gender”:[“male”]})。正在寻找另一种方法
标签: elasticsearch