【问题标题】:Searching for term and range in same bool filter in elasticsearch在弹性搜索中搜索相同布尔过滤器中的术语和范围
【发布时间】:2019-01-16 21:01:46
【问题描述】:

我的查询是这样的:

query: {
    filtered: {
        filter: {
            bool: {
                must: [
                    range: {price: {gte: 222, lte: 1000}},
                    term: {city: Adana}
                ]
            }
        }
    }
}

它返回空结果。但是使用 uri 搜索(_search?q=city:Adana 会给出正确的结果。

提供多个范围查询,例如纬度和价格有效,但添加术语失败。

这里有什么问题?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    试试这个:

    query: {
        filtered: {
            filter: {
                bool: {
                    must: [
                        { range: {price: {gte: 222, lte: 1000}} },
                        { term: {city: Adana} }
                    ]
                }
            }
        }
    }
    

    这是我用来测试它的一些代码:

    http://sense.qbox.io/gist/7a4811d00e562f4d41e252ae5084ec78fa23d80f

    【讨论】:

    • 抱歉,有问题已更改。我使用 array_push 所以它已经是一个数组。就像0 => range => ...1 => term => ...
    • 哦,那可能是termcity 字段是否已分析?如果是这样,那么正确的术语可能是adana,所以Adana 不会匹配任何东西。要么更改映射中该字段的分析,要么使用小写版本作为搜索词。或者使用匹配查询什么的。
    • 非常感谢,问题解决了。目前唯一的问题是带有空格的文本,但它们可以很容易地拆分为一个单词。再次感谢。
    • 过滤查询已在 ES 5.0 中被弃用和删除。您现在可以在过滤器中使用带有数组的布尔查询。 query: { bool: { filter: [ { match: {city: Adana} }, { range: {price: {gte: 222, lte: 1000}} } ] } }
    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多