3

ElasticSearch と Tire を使用したモデル (ActiveRecord) のインデックス マッピングに関する問題に遭遇しました。関連フィールドをマッピングするために、ドキュメントで彼らが話しているのと同じシステムを使用しています。マッピングは正しいようですが、どうやらそこにあるものを検索することはできません:

class ElasticSearchTest < ActiveRecord::Base
  belongs_to :elastic_search_belongs_to_test

  include Tire::Model::Search
  include Tire::Model::Callbacks

  mapping do
    indexes :title
    indexes :body
    indexes :elastic_search_belongs_to_test do
      indexes :title
      indexes :body
    end
  end

これは、エラスティック検索で利用可能なマッピング スキーマです。

 curl http://localhost:9200/elastic_search_tests/elastic_search_test_mapping?pretty=1

 >> {
   "elastic_search_test" : {
     "properties" : {
       "body" : {
         "type" : "string"
        },
        "elastic_search_belongs_to_test" : {
          "properties" : {
             "body" : {
               "type" : "string"
             },
             "title" : {
               "type" : "string"
             }
          }
        },
        "title" : {
          "type" : "string"
        }
      }
   }
}

良いようです。これらは私の例です:

t1 = ElasticSearchTest.create title: "title1", body: "body1",
                              elastic_search_belongs_to_test: ElasticSearchBelongsToTest.new(title: "title2", body: "body2"))

ElasticSearchTest.index.refresh
ElasticSearchTest.search("title1") #=> returns t1 in results
ElasticSearchTest.search("title2") #=> does not return t1 in results!!!!

私は何が欠けていますか?

4

1 に答える 1

2

関連付けがの出力に含まれていることを確認しますElasticSearchTest.new(...).to_indexed_json

Elasticsearch、Tire、およびNestedクエリ/完全なウォークトラフを含むActiveRecord回答との関連付けをご覧ください。

于 2013-02-27T07:46:23.520 に答える