Как установить анализатор по умолчанию для упругого поиска с шиной? - PullRequest
4 голосов
/ 12 марта 2012

В последнее время я экспериментировал с эластичным поиском с рубином на рельсах. У меня возникают проблемы с индексацией моих данных, поэтому я могу искать элементы как с множественными, так и с множественными ключевыми словами.

Шина позволит мне назначить анализатор для каждого атрибута сопоставления:

mapping do
  indexes title, analyzer: 'snowball'
  indexes body, analyzer: 'snowball'
end

Теперь, скажем, у меня есть ключевое слово в заголовке "тесты"

если я выполняю поиск по атрибуту в запросе: http://localhost:9200/myindex/mymapping/_search?q=title:test Это будет работать.

Однако, если я выполняю общий поиск без указания атрибута следующим образом:
http://localhost:9200/myindex/mymapping/_search?q=test

Не найдет документ.

Как мне указать, что я хочу, чтобы по умолчанию анализатор был "снежным комом", поэтому мне не нужно указывать атрибут, по которому я хочу искать?

p.s. Я использую Tyre Gem. Поэтому, пожалуйста, ответьте как можно лучше, учитывая это.

Ответы [ 2 ]

10 голосов
/ 12 марта 2012

Можно изменить анализатор по умолчанию, используя настройки индекса:

require 'rubygems'
require 'tire'

Tire.index 'articles' do
  delete
  create :settings => {
      :index => {
        :analysis => {
          :analyzer => {
            :default => {
              :type => 'snowball'
            }
          }
        }
      }
    },
    :mappings => {
      :article => {
        :properties => {
          :title    => { :type => 'string', :analyzer => 'snowball'},
          :body     => { :type => 'string', :analyzer => 'snowball'}
        }
      }
    }

  store :title => 'Tests', :body => "Plural"
  store :title => 'Test', :body => "Singular"

  refresh
end
3 голосов
/ 25 июля 2013

Это проще всего установить в файле настроек rubbersearch.yml:

index.number_of_shards: 2
index.number_of_replicas: 0
index.analysis.analyzer.default.type: snowball
...