首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch 5.x的条件查询(elasticsearch-rails/elasticsearch-模型)

ElasticSearch 5.x的条件查询(elasticsearch-rails/elasticsearch-模型)
EN

Stack Overflow用户
提问于 2017-05-13 17:19:47
回答 2查看 329关注 0票数 0

我和ElasticSearch都是新手,我想知道是否有一种方法可以构造条件查询/过滤器。我正在使用Rails,所以我认为它必须在特定的级别上,因为我找不到任何指向ES级别的条件查询的东西,而且我非常肯定,假设这样做是愚蠢的!

下面是我的(工作)查询:

代码语言:javascript
复制
search_definition = {
      query: {
          bool: {
              must: [
                  {
                      more_like_this: {
                          fields: tag_types,
                          docs: [
                              {
                                  _index: self.class.index_name,
                                  _type: self.class.document_type,
                                  _id: id
                              }
                          ],
                          min_term_freq: 1
                      }
                  }
              ],
              should: [
                  range: {
                      age: {
                          gte: min_age,
                          lte: max_age,
                          boost: 4.0
                      }
                  }
              ],
              filter: {
                  bool: {
                      must: [
                          term: {
                              active: true
                          }
                      ],
                      must: [
                          geo_distance: {
                              distance: xdistance,
                              unit: "km",
                              location: {
                                  lat: xlat,
                                  lon: xlng
                              },
                              boost: 5.0
                          }
                      ]
                  }
              }
          }
      },
      size: how_many
  }

而且效果很好。现在让我们假设我想要应用额外的过滤器,在这个特殊的例子中,我需要验证当正在搜索的用户时,另一端的用户实际上是在为搜索的人寻找一个性别的人。这被保存在数据库中的两个单独的布尔属性中(男性/女性)。我认为准备两个类似的过滤器非常简单--但是,还有一些条件过滤器会运行在查询中,最终我会得到超过10个预先准备好的过滤器。一定有一种更优雅的方式!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-14 06:05:48

你熟悉elasticsearch search templates

使用搜索模板,您可以使用conditionaldynamic查询。例如,您可以有一个字段和值列表来进行术语筛选,并将其作为参数传递给搜索模板。

票数 1
EN

Stack Overflow用户

发布于 2017-05-14 14:16:07

正如穆罕默德所建议的,最终,我用ES搜索模板来解决问题,这让我的生活变得轻松多了。JBuilder、ElasticSearch和其他解决方案的问题在于,它们似乎没有在使用最新的ES,随后,我不确定是否应该对ES的gems或版本进行任何更改。因此,把中间人物裁掉,用模板完全控制,这些模板实际上非常容易创建,这对我来说很有意义。我用JBuilder和ES设置的版本从未正确工作,因为它们的输出充其量是随机的。

搜索模板-> 更多信息

JBuilder -> 更多信息

ElasticSearch-DSL -> 更多信息

还有一些我还没有尝试过的解决方案,但是对于搜索模板,我不认为有任何必要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43955921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档