gpt4 book ai didi

elasticsearch - 对对象属性的elasticsearch过滤器

转载 作者:行者123 更新时间:2023-12-03 01:06:06 26 4
gpt4 key购买 nike

我正在尝试过滤关于对象(人)属性(名称)的术语,但似乎并没有弄错什么。如果我对字段“t”进行过滤,则可以使用,但似乎无法对对象进行过滤!谁能帮忙!

我的查询如下:

"query": {
"filtered" : {
"filter" : {
"term" : { "person.fname" : "JOHN"}
}
}

}

我的映射:
    {
"_ttl": {"enabled": true, "default": '90d'},

"properties" : {
"t": { "type" : "date" },

"person": { "type" : "object",
"properties" : {
"fname" : { "type" : "string"},
"lname" : { "type" : "string"}
}
}

}

}

该文档存在于索引中...
{
"_index" : "personindex",
"_type" : "S",
"_id" : "AUxnFFrAGK3sw8tqMMY0",
"_score" : 1.0,
"_source":{"t":1427658527178,"person":{"fname":"JOHN","lname":"DOE"}}
}

最佳答案

问题与分析有关。由于您的映射未指定分析器,因此使用standard analyzer。标准分析器将 token 转换为小写。因此,术语“john”以倒排索引结尾,而术语“JOHN”则不是。当您运行term查询时,不会分析查询文本,并且由于没有文档与确切的术语“JOHN”匹配,您将不会获得结果。

该查询将为您提供所需的信息:

{
"query": {
"filtered": {
"filter": {
"term": {
"person.fname": "john"
}
}
}
}
}

就像这一样(因为 match query对查询文本执行分析):
{
"query": {
"match": {
"person.fname": "JOHN"
}
}
}

或者,您可以在该字段上设置其他分析器(或不设置任何分析器),以使术语过滤器起作用。

这是我以前玩过的一些代码:

http://sense.qbox.io/gist/a87bcca08496218b07287d358939c1caed42f047

关于elasticsearch - 对对象属性的elasticsearch过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com