【发布时间】:2014-02-28 10:41:43
【问题描述】:
我是 elasticsearch 的新手,因为我最近刚从 Solr 切换。我现在正在尝试将我的 solrconfig 中的 edismax 查询转换为使用 elasticsearch。
基本上我希望同时在两个字段中搜索这些术语,所以我最终得到了这个查询:
{
"query": {
"dis_max": {
"queries": [
{
"match": {
"field_1": {
"query": "term1"
}
}
},
{
"match": {
"field_2": {
"query": "term1"
}
}
}
]
}
}
}
这适用于单个术语。如果有多个术语,则不需要找到每个术语。但是,我找不到实现此功能的方法。这就是minimum_should_match 参数的用途——由bool query 提供。
假设我有三个术语,我希望至少找到其中两个。通过反复试验,我检查了很多变体,包括以下内容:
{
"query": {
"dis_max": {
"queries": [
{
"match": {
"field_1": {
"query": "term1 term2 nonexistingterm",
"operator": "and",
"minimum_should_match": 2
}
}
},
{
"match": {
"field_2": {
"query": "term1 term2 nonexistingterm",
"operator": "and",
"minimum_should_match": 2
}
}
}
]
}
}
}
但是minimum_should_match 在这里不起作用,并且由于and 运算符没有找到结果。它不适用于or,因为只有一次点击就足以返回结果。
有人可以帮我将dis_max 与minimum should match 结合起来吗?
我找不到任何有关此的文档,因此非常感谢我自己可以在 elasticsearch 中找到这些信息的任何提示!
【问题讨论】:
-
我不确定你已经用
or尝试过是什么意思。下面的查询似乎在测试中正常工作。如果它不适合您,可能需要有关您的设置的更多详细信息。 -
这是我的设置: "version" : { "number" : "1.0.0", "build_hash" : "a46900e9c72c0a623d71b54016357d5f94c8ea32", "build_timestamp" : "2014-02-12T16:18:34Z ", "build_snapshot" : false, "lucene_version" : "4.6" },
标签: solr lucene elasticsearch edismax dismax