Я прочитал все ответы на один и тот же вопрос, и я не знаю, на каком я должен использовать его для моего использования и почему. Оба возвращают тот же результат. Я понимаю, что «FilterQuery будет кэшироваться, делая общее время запроса быстрее», как кто-то правильно ответил.solr main query vs fq
Я также понимаю, что «фильтрация также позволяет пометить грани, поэтому вы можете пометить грани, чтобы включить все грани, которые возвращаются для вашего запроса», как и кто-то еще правильно ответил.
Что я не понимаю, прочитав это, почему тогда кто-то будет использовать Q, поскольку FQ кажется намного лучше, основываясь на всех ответах и книгах, которые я видел.
Кроме того, я уверен, что существует вероятность того, что оба существуют.
Что я хотел бы, чтобы выяснить, что лучше для моего случая использования - документации очень не хватает в полезных примерах.
- Мои документы имеют: дата, клиент, отчет, и некоторые другие поля
- 1 Дата бизнес = 3,5 млн документов.
- Общее количество документов составляет 250 миллионов и подсчет (60 дат * 8000 клиентов * 1000 сообщений)
- Я граничаю с датой, клиентом, отчет, и я использую пометку фасетов.
- Пользовательский интерфейс выглядит как любой сайт электронной коммерции, например: Amazon, с гранями слева.
- Оценка не используется.
Бизнес-правило №1: дата должна всегда присутствовать в каждом запросе.
Бизнес-правило № 2: 99% запросов будут использовать ПОСЛЕДНЮЮ дату, но RANDOM-клиент и случайный отчет.
Факт: Мы определили, что это огранка, которая медленная, а не поиск.
ВОПРОСЫ:
Указанные критерии поиска, а эти способы написать запрос:
A) Q = дата: 20130214 И клиент: Джо & facet.field = дата & facet.field = клиент ...
B) д = дата: 20130214 & FQ = клиент: Джо & facet.field = дата & facet.field = клиент ...
C) д = клиент: Джо & FQ = дата: 20130214 & facet.field = дата & facet.field = клиент ...
D) Q = *: * & FQ = дата: 20130214 & FQ = клиент: Джо & facet.field = дата & facet.field = клиент ...
- , какой из выше вы думаете, что лучше и почему?Помните, что большинство запросов будут работать против 20130214
- в FQ-фильтрации, сделанной первым, а затем применено условие Q или наоборот?
Сегодня у меня есть D) используется во всех случаях, но я подозреваю, что это неправильно и вызывает OOM в Solr (версия 3.6).
Благодарим за помощь!
Благодарим вас за ответ. Если я скажу fq = 20130214 & q = client: Paige, значит ли это, что Solr придется сначала сканировать 250 миллионов документов для клиента: Paige, а затем фильтровать их, чтобы оставить их только на дату 20130214? Если да, не было бы более эффективным сначала найти все на дату (3,5 миллиона документов), а затем фильтровать на основе клиента? И еще больший вопрос: как я могу сказать, поскольку, похоже, нет инструментов, позволяющих опробовать оба сценария. –
Да, запрос фильтра будет выполнен после выполнения основного поиска. Но на основе ваших номеров документов вы можете переключить их и «q = 20130214 & fq = client: Paige», как вы знаете, вам нужно будет искать только 3,5 миллиона документов с датой, а затем фильтровать их, чтобы возвращать правильный клиент , Как определить правильный подход не сложно и быстро, это зависит от потребностей и сценария. Что касается инструментов для тестирования запросов, я бы очень рекомендовал SolrMeter - http://code.google.com/p/solrmeter/ –
Спасибо Paige. Вы ответили по-разному в двух разных ответах (на основе бизнес-правил и основанных на числах), поэтому я уточнил свой первоначальный вопрос. Не могли бы вы посмотреть еще раз. Кроме того, SolrMeter не показывает, как Solr обрабатывает запрос, который кэширует его, в каком порядке, что он находит и т. Д. Если вы знакомы с Sybase (или любой РСУБД), я ищу эквивалент 'set showplan on' Спасибо, -Дмитрий. –