2013-02-26 1 views
2

Я наткнулся на проблему, касающуюся отображения индексов моделей (ActiveRecord) с использованием ElasticSearch и Tire. Я использую ту же систему, о которой они говорят в документации, для сопоставления полей ассоциации. Отображение кажется правильным, но я не могу найти вещи там, по-видимому:ElasticSearch: Как правильно сопоставить ассоциации, чтобы их можно было искать?

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!!!! 

Что мне не хватает?

ответ

1

Убедитесь, что ассоциации включены в вывод ElasticSearchTest.new(...).to_indexed_json.

Обратите внимание на ответ Elasticsearch, Tire, and Nested queries/associations with ActiveRecord, который содержит полный проезд.

+0

не следует автоматически добавлять их на основании предположения, что если я определил их в преобразовании индекса, то я также хочу их написать? – ChuckE

+0

Да, метод 'to_indexed_json' по умолчанию должен учитывать их. – karmi

+0

Что это значит, если это не так? Потому что это именно то, что произошло. Есть ли конкретный случай, когда этого не происходит? – ChuckE