Tire를 사용하여 지속 모델에서 중첩 쿼리를 수행하려고합니다. 모델 (것)는 태그를 가지고 있으며 나는 쿼리를 실행할 때 나는 "하지 얻을 지속 검색을 통한 탄성 검색/타이어 중첩 쿼리
class Thing
def self.find_all_by_tag(tag_name, args)
self.search(args) do
query do
nested path: 'tags' do
query do
boolean do
must { match 'tags.name', tag_name }
end
end
end
end
end
end
end
같은 중첩 된 쿼리가 보이는
class Thing
include Tire::Model::Callbacks
include Tire::Model::Persistence
index_name { "#{Rails.env}-thing" }
property :title, :type => :string
property :tags, :default => [], :analyzer => 'keyword', :class => [Tag], :type => :nested
end
특정 태그가 모든 것을 찾을 찾고 있어요 재산 "이 매핑이 전달 옵션에서 생성 된 것으로 보인다 타이어의 소스를 보면 오류
Parse Failure [Failed to parse source [{\"query\":{\"nested\":{\"query\":{\"bool\":{\"must\":[{\"match\":{\"tags.name\":{\"query\":\"TestTag\"}}}]}},\"path\":\"tags\"}},\"size\":10,\"from\":0,\"version\":true}]]]; nested: QueryParsingException[[test-thing] [nested] nested object under path [tags] is not of nested type]; }]","status":500}
"중첩 된 형태의 매핑 "블록"방법, 그래서 내가 별도 필요하다고 생각하지 않는다 " 클래스. 누구든지 내가 뭘 잘못하고 있는지 알 수 있니? 아래 Karmi의 대답에 따라
UPDATE
, 나는 인덱스를 다시 작성하고 매핑이 올바른지 확인 :
thing: {
properties: {
tags: {
properties: {
name: {
type: string
}
type: nested
}
}
title: {
type: string
}
}
그러나, 나는
thing = Thing.new
thing.title = "Title"
thing.tags << {:name => 'Tag'}
thing.save
것
에 새 태그를 추가 할 때
매핑이 "동적"유형으로 바뀌고 "중첩 된"유형이 손실됩니다.
thing: {
properties: {
tags: {
properties: {
name: {
type: string
}
type: "dynamic"
}
}
title: {
type: string
}
}
이전과 같은 오류로 쿼리가 실패합니다. 새 태그를 추가 할 때 중첩 유형을 어떻게 보존합니까?
도움을 주셔서 감사 드리며 훌륭한 라이브러리입니다. 새 태그를 추가 할 때 중첩 된 문서 형식을 유지하는 데 여전히 문제가 있습니다. 세부 사항으로 질문을 업데이트했습니다. 어떤 빛을 비춰 줄 수 있습니까? –
나는이 일을하고있어, 고마워. 각 테스트 설정에서 Thing.create_elasticsearch_index를 호출하여 매핑이 제대로 작성되었는지 확인해야했습니다. –