Solr поиск множества значений - PullRequest
3 голосов
/ 27 сентября 2010

Я использую Solr для поиска длинного списка идентификаторов, например:

ID:("4d0dbdd9-d6e1-b3a4-490a-6a9d98e276be"
    "4954d037-f2ee-8c54-c14e-fa705af9a316"
    "0795e3d5-1676-a3d4-2103-45ce37a4fb2c"
    "3e4c790f-5924-37b4-9d41-bca2781892ec"
    "ae30e57e-1012-d354-15fb-5f77834f23a9"
    "7bdf6790-de0c-ae04-3539-4cce5c3fa1ff"
    "b350840f-6e53-9da4-f5c2-dc5029fa4b64"
    "fd01eb56-bc4c-a444-89aa-dc92fdfd3242"
    "4afb2c66-cec9-8b84-8988-dc52964795c2"
    "73882c65-1c5b-b3c4-0ded-cf561be07021"
    "5712422c-12f8-ece4-0510-8f9d25055dd9"...etc

Это работает до определенного момента, но выше определенного размера происходит сбой с сообщением: слишком много логических выражений . Вы можете увеличить лимит в файле solrconfig.xml, но это займет только пока - и я ожидаю, что лимит есть по причине:

<maxBooleanClauses>1024</maxBooleanClauses>

Я мог бы разбить запрос на несколько маленьких, но это помешало бы мне затем отсортировать результаты. Должен быть более подходящий способ сделать это?

1 Ответ

6 голосов
/ 27 сентября 2010

Вы должны использовать фильтр Lucene вместо создания огромного логического запроса. Попробуйте использовать FieldCacheTermsFilter и передайте этот фильтр своему поисковику. FieldCacheTermsFilter преобразует ваши UID в Lucene DocIdSet и сделает это быстро, так как он делает это через FieldCache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...