elasticsearch - 轮胎术语过滤器不起作用

标签 elasticsearch tire

我正在尝试通过轮胎/ elasticsearch实现“类似作用域”的功能。为什么即使我有状态为“Test1”或“Test2”的条目也不能正常工作?结果始终为空。

  collection = @model.search(:page => page, :per_page => per_page) do |s|
    s.query {all}
    s.filter :terms, :status => ["Test1", "Test2"]
    s.sort {by :"#{column}", "#{direction}"}
  end 

该方法在没有过滤器的情况下工作良好。过滤器方法有问题吗?我已经检查了轮胎doku。

谢谢! :)

最佳答案

您的问题很可能是由于使用status字段的默认映射引起的,该默认映射会将其标记化-小写,拆分为单词等。

比较这两个:

http://localhost:9200/myindex/_analyze?text=Text1&analyzer=standard

http://localhost:9200/myindex/_analyze?text=Text1&analyzer=keyword

您的解决方案是在映射中使用keyword分析器(或将字段设置为not_analyzed)。如果该字段不是“枚举”类型的数据,则可以使用multi-field功能。

有效的Ruby版本如下所示:
require 'tire'

Tire.index('myindex') do
  delete
  create mappings: {
    document: {
      properties: {
        status: { type: 'string', analyzer: 'keyword' }
      }
    }
  }

  store status: 'Test1'
  store status: 'Test2'

  refresh
end

search = Tire.search 'myindex' do
  query do
    filtered do
      query { all }
      filter :terms, status: ['Test1']
    end
  end
end

puts search.results.to_a.inspect

注意:在没有提供索引映射,示例数据等的情况下,极不可能(在这种情况下是异常(exception))提供合理的建议。

关于elasticsearch - 轮胎术语过滤器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005220/

相关文章:

elasticsearch - 如何在Elasticsearch中对多值字段进行桶聚合

django - Django Haystack:通过切面缩小其中的空格不会缩小

ruby-on-rails - 盆景服务器挂了怎么办?

amazon-web-services - 如何更改现有的AWS Kinesis Firehose交付流的目的地

regex - 流畅地将字段转换为整数

elasticsearch - Elastica-多个 bool 查询-子查询

search - 刷新请求与清空Elasticsearch缓存之间的区别

elasticsearch - 选择与 Elasticsearch 不同的

ruby-on-rails - Tire Elastic中的自定义分析器无法与Mongoid一起使用

ruby-on-rails - 使用 gem Tire 和 elasticsearch 进行高级搜索