java - Elasticsearch 全局搜索对多个索引的不同过滤器

标签 java search elasticsearch search-engine

我们在 Elastic Search 中有多个索引,想搜索所有索引中的数据,但我们想对不同的索引应用不同的过滤器。

例如:

  • 很少有索引依赖于 client_id,因此需要一个 client_id 过滤器
  • 我们在少数索引中有 is_deleted 标志,因此需要 is_deleted 过滤器

在 Elastic Search 中应该如何处理这个问题?

此外,我们正在使用突出显示功能,该功能旨在向用户提供建议。但是我们想忽略突出显示结果中的某些字段。是否可以在全局级别排除某些字段?

最佳答案

这是可能的,使用嵌套在 boolean 查询中的过滤查询

此示例说明了基本设置(注意如何使用不同的过滤器):

 @results = elastic_client.search([:dogs, :cats], {
   :bool => {
     :should => [
       # cats
       {
         :filtered => {
           :query => {
             :multi_match => {
               :query => 'meow', # repeated, replace with a variable
               :type => 'phrase_prefix',
               :fields => ['name', 'age']
             }
           },
           :filter => {
             :and => [
               { :term => { :owner_id => '123' } },
               { :type => { :value => 'cat' } }
             ]
           }
         }
       },
       # dogs
       {
         :filtered => {
           :query => {
             :multi_match => {
               :query => 'meow', # repeated, replace with a variable
               :type => 'phrase_prefix',
               :fields => ['name', 'color']
             }
           },
           :filter => {
             :and => [
               { :term => { :kennel_id => '456' } },
               { :type => { :value => 'dog' } }
             ]
           }
         }
       }
     ]
   }
 })

此特定代码可能适用于您的 ES 客户端,也可能不适用于您的 ES 客户端,但它应该能很好地理解这个概念。

请注意,查询“meow”出现了两次,您可能希望使用变量来在两个索引中搜索相同的内容。此外,multi_match 显然可以是某种其他类型的查询。

关于java - Elasticsearch 全局搜索对多个索引的不同过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21753021/

相关文章:

security - 使用基本凭证提供者配置Elasticsearch Rest高级客户端

java - 从 .NET 使用 Java Web 服务

java - Android Studio 错误中的 Activity.java

java - 在 spring-boot 类构造函数中首先调用还是 bootstrap.yml?

java - LinkedHashMap 的实例

php - 搜索关联数组的这个 php 数组的快速方法

arrays - 将整数数组传递给ElasticSearch模板

angular - 搜索/过滤状态 NGXS

Android 如何在图库中查看 SD 卡中的文档?

elasticsearch - 无法备份 Elasticsearch 数据?