当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch,多匹配过滤器?

吕天逸
2023-03-14

我在ES中有一个多匹配查询,希望添加一个过滤器。

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^2", "message" ]
  }
}

添加此筛选器的语法是什么?

我试过:

{
  "multi_match" => {
    "query" => "list",
    "fields" => [ "username" ]

  },
"filter" => {
        "term" => { "username" => "slimkicker"}
    }
}

共有3个答案

邢炯
2023-03-14

根据Elasticsearch的新文档,格式稍有变化,现在您必须使用bool和must,并且可以从以下查询中分别应用过滤器:,

{
    'index' : 'users',
        'type' : 'users',
        'body' : {
          "query" : {
            "bool" : {
              "must" : {
                'multi_match' : {
                    'fields' : {'source^1', 'first_name^5', 'last_name^4', 'email^3', 'postcode^2', 'telephone', 'address', 'alternate_address'
                    },
                    'query' : 'Shahrukh Anwar',
                },
              },
              "filter" : {
                "term" : {
                  'assigned_to' : 125
                }
              }
            }
          }
        }
}
叶炜
2023-03-14

使用Elasticsearch 5,语法已更改为布尔查询的用法,例如:。

{
  "from" : 0,
  "size" : 10,
  "sort" : "publishDate",
  "query": {
    "bool": {  
      "must" : {
        "multi_match" : {
          "query":      "wedding",
          "type":       "most_fields",
          "fields":     [ "title", "text" ]
        }
      },
      "filter": {
        "term": {
          "locale": "english"
        }
      }
    }
  }
}

文档可在此处找到。

司易安
2023-03-14

根据需要,您必须将过滤器放置在适当的位置。您有两种选择:

使用顶级过滤器,将过滤器仅应用于搜索结果,而不应用于面

{
    "query" : {
        "multi_match" : {
            "query" : "this is a test",
            "fields" : [ "subject^2", "message" ]
        }
    },
    "filter" : {
        "term" : { "username": "slimkicker" }
    }
} 

使用过滤的查询,并将过滤器应用于搜索结果和方面

{
    "query" : {
        "filtered" : {
            "query" : {
                "multi_match" : {
                    "query" : "this is a test",
                    "fields" : [ "subject^2", "message" ]
                }
            },
            "filter" : {
                "term" : { "username": "slimkicker" }
            }
        }
    }
}
 类似资料:
  • 问题内容: 我在ES中有一个多匹配查询,并希望添加一个过滤器。 添加此过滤器的语法是什么? 我试过了: 问题答案: 根据您的需要,必须将过滤器放置在正确的位置。您有两种选择: 使用顶级过滤器,并将该过滤器仅应用于搜索结果,而不应用于各个方面 使用过滤的查询,并将过滤器应用于搜索结果和构面

  • 我不熟悉Elasticsearch和Nest,请原谅我的无知。我想在Elasticsearch v2.3.5中使用过滤器和multi\u匹配查询,但到目前为止,我还无法解决这个问题。我想,一旦我把它用于Elasticsearch,我应该能够将它映射到Nest。 以下是我的JSON数据结构: 下面是我的工作搜索查询(没有任何过滤器): 我只想在搜索结果中向用户显示这些记录,其中: 我尝试了不同的查询

  • 如何使此过滤器在同一文本中的多个匹配项上工作? 这是返回链接的函数 使用筛选器的示例文本: Ut[点击这里|节点: 4]enim ad minim veniam,quis[点击这里|术语: 42]nostr的练习ullamco的劳动是新的和其他的结果。Duis ate irure Dolor in re的谴责在流言蜚语velit esse cilum[点击这里|术语: 1]Dolore eu fu

  • 问题内容: 我正在使用ORB特征检测器使用以下代码查找两个图像之间的匹配项: 我的问题是我找不到过滤匹配项的方法,因此仅当它们在照片中具有相似位置时才匹配。即使一个关键点在位置上距离很远,我也总是会得到多个匹配。 有没有办法更好地过滤它们? 问题答案: 为了获得更好的匹配结果,您应该以给定的顺序包括这些过滤方法。 在两个方向上执行匹配,即对于第一张图像中的每个点,在第二张图像中找到最佳匹配,反之亦

  • 问题内容: 我需要按类别过滤项目列表。我希望用户能够单击一个按钮,然后将过滤器应用于列表。 目前,我已经在一定程度上进行了这项工作。 举例来说,我有一个电影列表,如下所示: 我还有一个电影流派列表(渲染为按钮,单击该按钮将过滤电影列表),如下所示: (“ changeGenre()”函数所做的全部工作就是更新范围,以显示当前正在查看的流派)。 现在这个方法可以正常工作,直到我遇到两种类型的情况:“

  • 问题内容: 如何通过所有多词搜索仅获取经过过滤的匹配结果。我有这个示例表,其中titleid是一个映射int字段,personid是一个关键字: 删除结果为: 使用这样的示例查询: 我得到以下结果: 也许这会有所帮助,我在sql中进行了查询并获得了预期的结果。我所做的是让查询给我与搜索到的参数数量匹配的titleid之和。这只是为了更多地自我解释,其思想是使用elasticsearch。 问题答案