Elasticsearch创建索引的问题(Rails)

时间:2016-02-20 13:36:40

标签: ruby-on-rails elasticsearch hunspell

我遇到了为Product model类创建索引的问题。这是因为我添加了hunspell过滤器并且无法弄清楚错误是什么。

我会感激任何提示。

谢谢Miroslav

配置:

settings index: {
number_of_shards: 5,
analysis: {
  filter: {
    trigrams_filter: {
      type: 'ngram',
      min_gram: 2,
      max_gram: 10
    },
    content_filter: {
      type: 'ngram',
      min_gram: 4,
      max_gram: 20
    },
    hunspell_CZ: {
      type: 'hunspell',
      locale: 'cs_CZ',
      dedup: true,
      recursion_level: 0
    },
    czechStemmer: {
      type: 'stemmer',
      name: 'czech'
    },
    customWordDelimiter: {
      type: 'word_delimiter',
      generate_word_parts: true,
      generate_number_parts: true,
      catenate_words: true,
      catenate_numbers: true,
      catenate_all: true,
      split_on_case_change: true,
      preserve_original: true,
      split_on_numerics: true,
      stem_english_possessive: false
    },
    customUnique: {
      type: 'unique',
      only_on_same_position: false
    }
  },
  analyzer: {
    myFulltextAnalyzer: {
      type: 'custom',
      tokenizer: 'standard',
      filter: ['lowercase', 'hunspell_CZ', 'icu_folding', 'customWordDelimiter', 'czechStemmer', 'customUnique'],
      char_filter: ['html_strip']
    },
    index_trigrams_analyzer: {
      type: 'custom',
      tokenizer: 'standard',
      filter: ['lowercase', 'trigrams_filter', 'asciifolding']
    },
    search_trigrams_analyzer: {
      type: 'custom',
      tokenizer: 'whitespace',
      filter: ['lowercase']
    },
    english: {
      tokenizer: 'standard',
      filter: ['standard', 'lowercase', 'content_filter']
    },
    czech: {
      tokenizer: 'standard',
      filter: ['asciifolding','standard','lowercase','content_filter']
    }
  }
}
} do
mappings dynamic: 'false' do
  indexes :id, type: 'integer'
  indexes :active, type: 'boolean'
  indexes :en_product, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :ma_product, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :cs_product, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :en_description, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :ma_description, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :cs_description, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :en_specification, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :ma_specification, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :cs_specification, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
  indexes :manufacturer, index_analyzer: 'myFulltextAnalyzer', search_analyzer: 'myFulltextAnalyzer'
end
end

日志输出:

[2016-02-20 13:58:03,083][DEBUG][action.admin.indices.create] [db1] [products] failed to create
org.elasticsearch.indices.IndexCreationException: [products] failed to create index
    at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:338)
    at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$2.execute(MetaDataCreateIndexService.java:371)
    at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:374)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:204)
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:167)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: expected ']' at position 46

控制台输出:

2.2.0 :001 > Product.__elasticsearch__.create_index! force: true
2016-02-20 13:57:40 +0100: DELETE http://51.255.133.242:9200/products [status:404, request:0.010s, query:N/A]
2016-02-20 13:57:40 +0100: < {"error":"RemoteTransportException[[db1][inet[/10.250.0.30:9300]][indices:admin/delete]]; nested: IndexMissingException[[products] missing]; ","status":404}
2016-02-20 13:57:40 +0100: [404] {"error":"RemoteTransportException[[db1][inet[/10.250.0.30:9300]][indices:admin/delete]]; nested: IndexMissingException[[products] missing]; ","status":404}
[!!!] Index does not exist (Elasticsearch::Transport::Transport::Errors::NotFound)
2016-02-20 13:57:40 +0100: HEAD http://51.255.133.242:9200/products [status:404, request:0.006s, query:N/A]
2016-02-20 13:57:40 +0100: < 
2016-02-20 13:57:40 +0100: [404] 
2016-02-20 13:57:42 +0100: PUT http://51.255.133.242:9200/products [status:500, request:1.565s, query:N/A]
2016-02-20 13:57:42 +0100: > {"settings":{"index":{"number_of_shards":5,"analysis":{"filter":{"trigrams_filter":{"type":"ngram","min_gram":2,"max_gram":10},"content_filter":{"type":"ngram","min_gram":4,"max_gram":20},"hunspell_CZ":{"type":"hunspell","locale":"cs_CZ","dedup":true},"czechStemmer":{"type":"stemmer","name":"czech"},"customWordDelimiter":{"type":"word_delimiter","generate_word_parts":true,"generate_number_parts":true,"catenate_words":true,"catenate_numbers":true,"catenate_all":true,"split_on_case_change":true,"preserve_original":true,"split_on_numerics":true,"stem_english_possessive":false},"customUnique":{"type":"unique","only_on_same_position":false}},"analyzer":{"myFulltextAnalyzer":{"type":"custom","tokenizer":"standard","filter":["lowercase","hunspell_CZ","icu_folding","customWordDelimiter","czechStemmer","customUnique"],"char_filter":["html_strip"]},"index_trigrams_analyzer":{"type":"custom","tokenizer":"standard","filter":["lowercase","trigrams_filter","asciifolding"]},"search_trigrams_analyzer":{"type":"custom","tokenizer":"whitespace","filter":["lowercase"]},"english":{"tokenizer":"standard","filter":["standard","lowercase","content_filter"]},"czech":{"tokenizer":"standard","filter":["asciifolding","standard","lowercase","content_filter"]}}}}},"mappings":{"product":{"dynamic":"false","properties":{"id":{"type":"integer"},"active":{"type":"boolean"},"en_product":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"ma_product":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"cs_product":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"en_description":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"ma_description":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"cs_description":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"en_specification":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"ma_specification":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"cs_specification":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"},"manufacturer":{"index_analyzer":"myFulltextAnalyzer","search_analyzer":"myFulltextAnalyzer","type":"string"}}}}}
 2016-02-20 13:57:42 +0100: < {"error":"RemoteTransportException[[db1][inet[/10.250.0.30:9300]][indices:admin/create]]; nested: IndexCreationException[[products] failed to create index]; nested: UncheckedExecutionException[java.lang.IllegalArgumentException: expected ']' at position 46]; nested: IllegalArgumentException[expected ']' at position 46]; ","status":500}
 2016-02-20 13:57:42 +0100: [500] {"error":"RemoteTransportException[[db1][inet[/10.250.0.30:9300]][indices:admin/create]]; nested: IndexCreationException[[products] failed to create index]; nested: UncheckedExecutionException[java.lang.IllegalArgumentException: expected ']' at position 46]; nested: IllegalArgumentException[expected ']' at position 46]; ","status":500}
Elasticsearch::Transport::Transport::Errors::InternalServerError: [500] {"error":"RemoteTransportException[[db1][inet[/10.250.0.30:9300]][indices:admin/create]]; nested: IndexCreationException[[products] failed to create index]; nested: UncheckedExecutionException[java.lang.IllegalArgumentException: expected ']' at position 46]; nested: IllegalArgumentException[expected ']' at position 46]; ","status":500}
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/elasticsearch-transport-1.0.13/lib/elasticsearch/transport/transport/base.rb:136:in `__raise_transport_error'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/elasticsearch-transport-1.0.13/lib/elasticsearch/transport/transport/base.rb:228:in `perform_request'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/elasticsearch-transport-1.0.13/lib/elasticsearch/transport/transport/http/faraday.rb:20:in `perform_request'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/elasticsearch-transport-1.0.13/lib/elasticsearch/transport/client.rb:119:in `perform_request'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/elasticsearch-api-1.0.13/lib/elasticsearch/api/namespace/common.rb:21:in `perform_request'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/elasticsearch-api-1.0.13/lib/elasticsearch/api/actions/indices/create.rb:77:in `create'
from /opt/deploy/shared/bundle/ruby/2.2.0/bundler/gems/elasticsearch-rails-ded203569208/elasticsearch-model/lib/elasticsearch/model/indexing.rb:228:in `create_index!'
from (irb):1
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/commands/console.rb:110:in `start'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/commands/console.rb:9:in `start'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:68:in `console'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /opt/deploy/shared/bundle/ruby/2.2.0/gems/railties-4.2.3/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'

1 个答案:

答案 0 :(得分:0)

@SsouLlesS我计划将其转移到reTire,但后来,不是现在因为我们需要尽快推出第一个产品。无论如何,我能够解决上述问题。 hunspell cs-CZ库由于某种原因被破坏,当我导入固定版本(取自https://issues.apache.org/jira/browse/LUCENE-4311)时,问题已经消失,并且按预期工作。感谢您的时间和小费。米罗