gpt4 book ai didi

elasticsearch - 无法使Elasticsearch过滤器正常工作

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

使用Elasticsearch 2和Rails 4,使用elasticsearch-model gem

一切都很好,甚至地理距离都可以。但是,我终生无法解决如何使一个简单的 bool(boolean) 过滤器正常工作的问题。我有一个简单的 bool(boolean) 值“exclude_from_search_results”(当为true时)应使记录从结果中过滤出来。

这是我在rails Controller 中的查询(没有过滤器):

    @response = Firm.search(
query: {
bool: {
should: [
{ multi_match: {
query: params[:search],
fields: ['name^10', 'address_1', 'address_2', 'address_3', 'address_4', 'address_5', 'address_6'],
operator: 'or'
}
}
]
}
},
aggs: {types: {terms: {field: 'firm_type'}}}
)

我已经在bool或query部分或外部添加了它,但是我没有文档或所有文档。 (9000应该匹配)

例:
  @response = Firm.search(
query: {
bool: {
should: [
{ multi_match: {
query: params[:search],
fields: ['name^10', 'address_1', 'address_2', 'address_3', 'address_4', 'address_5', 'address_6'],
operator: 'or'
}
}
],
filter: {
term: {"exclude_from_search_results": "false"}
}
}
},
aggs: {types: {terms: {field: 'firm_type'}}}
)

我也尝试将filter子句放在不同的位置,但会得到错误或没有结果。我究竟做错了什么??可能缺少一些简单的东西...

这是我的映射:
    "mappings" : {
"firm" : {
"dynamic" : "false",
"properties" : {
"address_1" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
},
"address_2" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
},
"address_3" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
},
"address_4" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
},
"address_5" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
},
"address_6" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
},
"exlude_from_search_results" : {
"type" : "boolean"
},
"firm_type" : {
"type" : "string",
"index" : "not_analyzed"
},
"location" : {
"type" : "geo_point"
},
"name" : {
"type" : "string",
"index_options" : "offsets",
"analyzer" : "english"
}

任何指针都非常感谢...

最佳答案

您当前的查询正在对过滤条件和多重匹配查询进行“或”运算。那就是您要么获得所有文件的原因。

我想您想在过滤器和多重匹配查询之间进行“与”运算。
如果是这种情况,那么以下查询对我有用。

{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "address1",
"fields": [
"name^10",
"address1",
"address2",
"address3",
"address4",
"address5",
"address6"
],
"operator": "or"
}
},
{
"term": {
"exclude_from_search_results": {
"value": "false"
}
}
}
]
}
},
"aggs": {
"types": {
"terms": {
"field": "name"
}
}
}
}

希望有帮助,谢谢。

关于elasticsearch - 无法使Elasticsearch过滤器正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41409261/

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