Elasticsearch 2.2查询针对同一字段测试多个查询字符串

时间:2016-08-01 00:44:52

标签: php elasticsearch

我想知道somone是否已尝试或建议将单个字段与多个查询字符串匹配的最佳方法。最简单的解释方法是说我想在mysql中执行相当于WHERE name = "jeff" OR name = "thomas" OR name = "harry"的操作,但将其翻译为elasticsearch匹配查询。

我希望结果能够自己处理每个查询条件,忽略其他查询返回的内容。

有效这是这个查询

{
    "query": {
                { "match": { "title": "Brown fox" }}
    }
}

但能够添加其他匹配查询。我可以运行多个查询,但我认为将它作为一个查询运行会更有效(并且更愿意)。

我试过了:

{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

但是根据所有查询的匹配情况,评分会受到影响。理想情况下,我希望分数仅基于单个查询。

dis_max查询

  

https://www.elastic.co/guide/en/elasticsearch/guide/current/_best_fields.html#dis-max-query

似乎是最接近我所追求的,但得分似乎仍然受到其他查询的影响。来自dis_match的得分似乎与query:{match:{}}得分完全不同。

在一天结束时,我想要编写一个尝试匹配查询字符串的查询,但也尝试使用字符串的多个变体和缩写替换,例如where name="company ltd" OR name="company limited",其他条件无关紧要。

问题摘要

有没有人遇到过更好的查询方法来运行具有多个条件的查询,其中每个条件都独立于另一个条件并相应地返回结果和分数?

如果没有其他内容出现,我可能会使用dis_match查询类型。

1 个答案:

答案 0 :(得分:0)

最后,我能保证在同一请求中进行独立搜索的唯一方法是使用多搜索API端点并将响应粘贴到一个结果数组中

  

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html#search-multi-search