Что было бы хорошим дизайном для использования Solr для поиска в сложных JSON? Например там может быть документ, как:Solr дизайн для поиска в комплексе JSON
{
"books" : [
{
"title" : "Some title",
"author" : "Some author",
"genres" : [
"thriller",
"drama"
]
},
{
"title" : "Some other title",
"author" : "Some author",
"genres" : [
"comedy",
"nonfiction",
"thriller"
]
}
]
}
Пример запрос будет получить все документы, которые имеют книгу автор которой является «Некоторым автором» и один из жанров книги является «драмой».
Сейчас дизайн я придумал, чтобы иметь dynamicField в schema.xml, что индексы все как текст (на данный момент), например, так:
<dynamicField name="*" type="text" index="true" stored="true"/>
Затем SolrJ используется для разбора JSON и создать SolrInputDocument с полями для каждой части данных. Например эти поля/значение, которые будут созданы для примера JSON выше:
books0.title : "Some title"
books0.author : "Some author"
books0.genres0 : "thriller"
books0.genres1 : "drama"
books1.title : "Some other title"
books1.author : "Some author"
books1.genres0 : "comedy"
books1.genres1 : "nonfiction"
books1.genres2 : "thriller"
На данный момент мы могли бы использовать LukeRequestHandler, чтобы получить все поля в индексе, а затем сделать большой запрос Solr, что проверяет все интересующие нас поля. Для запроса запроса над запросом будут проверяться все поля «books # .author» и «books # .genres #». Это решение кажется неэлегантным, и запросы могут стать очень большими, если есть много полей.
Было бы полезно использовать подстановочные знаки в именах полей, но я не думаю, что это возможно с помощью Solr.
Есть ли лучший способ достичь этого, возможно, используя в схеме какую-нибудь умную комбинацию «copyField» и «multiValued»?
Вы имеете в виду, что каждая «книга» будет документом? – Thomas
you отдельный документ. – Jayendra
Я принял этот ответ, потому что привел меня к этому http://www.lucidimagination.com/search/document/93e8b09e90b0076c/help_with_denormalizing_issues#60890dcb99a3004d, который убедил меня, что каждый «объект» в JSON необходимо индексировать как собственный документ , – Thomas