Точность результатов Elasticsearch-rails не соответствует ожиданиям

Я использую elasticsearch-rails и elasticsearch-model gem для поиска слов в моем приложении rails.

Вот моя модель, где я хочу, чтобы поиск состоялся

require 'elasticsearch/model'

    class Article < ActiveRecord::Base
      include Elasticsearch::Model
      include Elasticsearch::Model::Callbacks

      settings index: { number_of_shards: 1 } do
        mappings dynamic: 'false' do
          indexes :title, analyzer: 'english', index_options: 'offsets'
          indexes :text, analyzer: 'english'
        end
      end

      def self.search(query)
        __elasticsearch__.search(
          {
            query: {
              multi_match: {
                query: query,
                fields: ['title^10', 'text']
              }
            },
            highlight: {
              pre_tags: ['<em>'],
              post_tags: ['</em>'],
              fields: {
                title: {},
                text: {}
              }
            }
          }
        )
      end
    end

    # Delete the previous articles index in Elasticsearch
    Article.__elasticsearch__.client.indices.delete index: Article.index_name rescue nil

    # Create the new index with the new mapping
    Article.__elasticsearch__.client.indices.create \
      index: Article.index_name,
      body: { settings: Article.settings.to_hash, mappings: Article.mappings.to_hash }

    # Index all article records from the DB to Elasticsearch
    Article.import

    #Article.import force: true

Мои вопросы, как мне сделать поиск слова? футболка, футболка, все футболки должны совпадать. Любые ссылки для дальнейшего исследования также полезны. Спасибо


person Yogesh Nikam    schedule 09.01.2017    source источник


Ответы (1)


Ключевое слово, которое вы ищете, — нечеткость.

См., например, этот пост в блоге: http://dev.mikamai.com/post/85901585484/elasticsearch-on-rails-a-primer

records = Article.search(query: {match: {_all: {query: 'wold', fuzziness: 2}}}).records
records.first.title #  => "Hello World"

fuzziness представляет максимально допустимое расстояние Левенштейна, оно принимает целое число от 0 до 2 (где 2 означает максимально нечеткий поиск) или строку «AUTO», которая будет генерировать расстояние редактирования на основе длины символов терминов в запросе.

person Wukerplank    schedule 09.01.2017