2013-02-22 4 views
2

РедактироватьSolr Группировка пустое поле

Я извиняюсь, если я не объяснить хорошо мою потребность. Я постараюсь дать лучшее объяснение.

Что у меня есть: миллионы документов, которые имеют поле X, другое поле Y и другое поле Z, которое не требуется (значит, оно может быть пустым в некоторых документах, а не в других).

Что я хочу сделать: Поиск документов, у которых есть поле X, равно чему-то и группировать их по полю Z (так что для каждого значения поля Z возвращается только один документ), НО мне нужны документы, у которых есть поле Z as пустым для включения в результаты (все они) и сортировать результаты по полю Y (поэтому я не могу отделить запрос от двух запросов).

Я надеюсь, что это яснее.

ответ

1

Это лучший ответ, который я мог бы найти для моего вопроса (от пользователей Solr списка рассылки):

Идея состоит в том, чтобы использовать поле копирования поля Z и при индексировании данных, если поле Z пусто, генерирует уникальное значение в поле копирования. А при группировке используйте поле копирования вместо поля Z. (если поле Z необходимо только для группировки, его можно использовать самостоятельно без поля копирования).

+0

Я использовал одно и то же решение, но мне кажется, что должен быть лучший способ сделать это. – user779420

0

Вы можете использовать group.query с group.main, чтобы достичь этого.

Например, запрос ниже извлекает все документы по цене от 0 до 10 и группирует результаты по популярности. Установка group.query=popularity:[* TO *] гарантирует, что популярность присутствует. Создание group.main=true гарантирует, что результат group.query будет основным результатом.

select?q=price:[0%20TO%20 10]&wt=json&group=true&group.field=popularity&group.query=popularity:[*%20TO%20*]&group.main=true

См https://wiki.apache.org/solr/FieldCollapsing

Update: Я вижу, что выше не работает. SO рекомендует отредактировать ответ, вместо того, чтобы удалить мой ответ выше и дать новый ответ :-).

Не можете ли вы сделать 2 таких запроса?

«Искать документы, которые имеют поле X равно что-то и сгруппировать их по полю Z (так, что только один документ возвращается для каждого поля значения Z)»

q=X:1&group=true&group.field=Z 

«Я хочу, чтобы документы, которые имеют поле Z, как пустой, чтобы быть включены в результаты (все из них), и сортировать результаты поля Y»

q=(X:1 AND -Z:[* TO *])&rows=SOME_LARGE_NUMBER&sort=Y asc 
+0

Это не то, что я хочу сделать, я хочу, чтобы все документы были сгруппированы по полю, но docs с этим полем пустым, не сгруппировавшись вместе, но все же включенные в результаты. – Oussama

+0

Спасибо за вашу помощь, но я могу " t выполнить два запроса из-за необходимой сортировки. – Oussama

Смежные вопросы