Elasticsearch ngram索引不返回任何内容

时间:2019-01-31 12:51:58

标签: ruby-on-rails ruby elasticsearch elasticsearch-model

我正在尝试使用nGram构建自定义分析器,并且显然工作正常,只是出于某种原因我无法对其进行查询。 我在Ruby中使用`elasticsearch-model

以下是定义索引的方式:

  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 个答案:

没有答案