Elasticsearch ngram index ничего не возвращает

Я пытаюсь построить собственный анализатор, используя nGram, и, очевидно, он работает нормально, я просто не могу запросить его по какой-то причине. Я использую `asticsearch-модель в Ruby

Вот как определяется индекс:

  include Elasticsearch::Model

  index_name "stemmed_videos"

  settings index: { number_of_shards: 5 },
    analysis: {
      analyzer: {
        video_analyzer: {
          tokenizer: :stemmer,
          filter: [
            "lowercase"
          ]
        },
        standard_lowercase: {
          tokenizer: :standard,
          filter: [
            "lowercase"
          ]
        }
      },
      tokenizer: {
        stemmer: {
          type: "nGram",
          min_gram: 2,
          max_gram: 10,
          token_chars: [
            "letter",
            "digit",
            "symbol"
          ]
        }
      }
    } do
    mappings do
      indexes :title, type: 'string', analyzer: 'video_analyzer'
      indexes :description, type: 'string', analyzer: 'standard_lowercase'
    end
  end

  def as_indexed_json(options = {})
    as_json(only: [:title, :description])
  end

Я попытался взять одну из строк, которые я пытаюсь проиндексировать, и запустить ее через " http: // localhost: 9200 / stemmed_videos / _analyze? Pretty = 1 & analyzer = video_analyzer & text = indiana_jones_4-tlr3_h640w.mov", и он, очевидно, выполняет правильная вещь. Но тогда единственный способ сделать общий запрос - это добавить символы подстановки, а это не то, чего я ожидаю.

[8] pry(main)> Video.__elasticsearch__.search('*ind*').results.total
=> 4
[9] pry(main)> Video.__elasticsearch__.search('ind').results.total
=> 0

(4 - правильное количество результатов в моих данных испытаний). Я хотел бы добиться правильных результатов без подстановочных знаков, потому что теперь у меня есть необходимость взять строку запроса и добавить подстановочные знаки в коде, что, честно говоря, довольно плохо. Как я могу сделать это?

Заранее спасибо.

0 ответов

Другие вопросы по тегам