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

У меня есть индекс с чем-то как 60-100 миллионов документов. Мы почти всегда подвергаем сомнению эти документы (в дополнение к другим вопросам фильтра и полевым вопросам, и т.д.) на id внешнего ключа, чтобы рассмотреть вопрос определенному родительскому объекту.

So, for example: /solr/q=*:*&fq=parent_id_s:42

Да, тот _s означает, что это в настоящее время solr. StrField тип поля.

Мой вопрос: я должен изменить это на TrieIntField ? Это ускорило бы работу? И если так, каков был бы идеал precisionStep и positionIncrementGap ценности, учитывая, что я знаю, что буду всегда подвергать сомнению для единственной определенной стоимости, и что количество элементов того parent_id находится в 10,000-100,000 (максимальных) порядках величины?


Отредактируйте для дополнительной детали (из комментария к ответу ниже): Путем наша система используется, оказывается, что мы заканчиваем тем, что использовали тот же самый fq для многих вопросов подряд. И когда тайник населен, системные пробеги, сверкающие быстро. Когда тайник свален из-за передавания, этот вопрос (даже тестовый сценарий с ТОЛЬКО этим fq) может занять до 20 секунд. Таким образом, я пытаюсь выяснить, как ускорить тот начальный вопрос, который населяет тайник.


Второй отредактируйте:

I apologize, after further testing it turns out that the above poor performance only happens when there are also facet fields being returned (e.g. stuff like &facet=true&facet.field=resolved_facet_facet). With a dozen or so of these fields, that's when the query takes up to 20-30 seconds sometimes, but only with a fresh searcher. It's instant when the cache is populated. So maybe my problem is the facet fields, not the parent_id field.

3
Много идей. Вы думали о sharding ваш индекс с SolrCloud? Это помогло бы распространить бремя здания/поддержания тайника фильтра. Как часто вы передаете? Действительно ли вы предварительно нагреваете свои тайники после того, как передаст? Вы изучили другие иерархические решения для поиска как SirenDB?
добавлено автор Doug T., источник
Много идей. Вы думали о sharding ваш индекс с SolrCloud? Это помогло бы распространить бремя здания/поддержания тайника фильтра. Как часто вы передаете? Действительно ли вы предварительно нагреваете свои тайники после того, как передаст? Вы изучили другие иерархические решения для поиска как SirenDB?
добавлено автор Doug T., источник
(1) У нас был solr тренер, на основе его опыта, которому он советовал, чтобы ограничить индекс ~10 миллионами докторов, следящих за той фигурой в памяти, вы могли разделить свой индекс на 10 черепков. (2) другая вещь, вы рассматривали SSD для хранения индекса?
добавлено автор cheffe, источник
(1) У нас был solr тренер, на основе его опыта, которому он советовал, чтобы ограничить индекс ~10 миллионами докторов, следящих за той фигурой в памяти, вы могли разделить свой индекс на 10 черепков. (2) другая вещь, вы рассматривали SSD для хранения индекса?
добавлено автор cheffe, источник
Реакция на вашу секунду редактирует: Как эти типы поля того аспекта - области? Они - что-либо различное от простых последовательностей? Если так, вы могли опубликовать определение их типа поля от вашего schema.xml?
добавлено автор cheffe, источник
Реакция на вашу секунду редактирует: Как эти типы поля того аспекта - области? Они - что-либо различное от простых последовательностей? Если так, вы могли опубликовать определение их типа поля от вашего schema.xml?
добавлено автор cheffe, источник
@cheffe Хорошая мысль. Я просто проверил схему, и они - просто нормальные последовательности без анализаторов (они многозначные хотя). Некоторые из них булевы или "Да" / "нет" и материал, таким образом, я изменил все те, у которых есть 2-4 возможных ценности, чтобы использовать аспект method=enum в дефолте params для искателя. Кажется, незначительное улучшение, но оно походит на включение, и затем щипание автопотепления может быть лучшим, чтобы я мог сделать...
добавлено автор Jeff Gran, источник
@cheffe Хорошая мысль. Я просто проверил схему, и они - просто нормальные последовательности без анализаторов (они многозначные хотя). Некоторые из них булевы или "Да" / "нет" и материал, таким образом, я изменил все те, у которых есть 2-4 возможных ценности, чтобы использовать аспект method=enum в дефолте params для искателя. Кажется, незначительное улучшение, но оно походит на включение, и затем щипание автопотепления может быть лучшим, чтобы я мог сделать...
добавлено автор Jeff Gran, источник
@cheffe Хорошая мысль. Я просто проверил схему, и они - просто нормальные последовательности без анализаторов (они многозначные хотя). Некоторые из них булевы или "Да" / "нет" и материал, таким образом, я изменил все те, у которых есть 2-4 возможных ценности, чтобы использовать аспект method=enum в дефолте params для искателя. Кажется, незначительное улучшение, но оно походит на включение, и затем щипание автопотепления может быть лучшим, чтобы я мог сделать...
добавлено автор Jeff Gran, источник

8 ответы

TrieIntField with a precisionStep is optimized for range queries. As you're only searching for a specific value your field type is optimal.

Have you looked at autowarming queries? These run whenever a new IndexSearcher is being created (on startup, on an index commit for example), so that it becomes available with some cache already in place. Depending on your requirements, you can also set useColdSearcher flag to true, so that the new Searcher is only available when the cache has been warmed. For more details have a look here: https://cwiki.apache.org/confluence/display/solr/Query+Settings+in+SolrConfig#QuerySettingsinSolrConfig-Query-RelatedListeners

4
добавлено
Кроме того, пожалуйста, посмотрите, что моя секунда редактирует к вопросу: это относится к тайнику аспекта также? Какой тайник я должен автонагреть для того типа вопроса?
добавлено автор Jeff Gran, источник
Я думаю, что можно быть на правильном пути. Я не использую автопотепления в настоящее время. Одно из моих требований - то, что любые дополнения или обновления любых документов немедленно доступны. Если я использую автопотепление и отпуск на "искателе холода использования", который сделает то, в чем я нуждаюсь? Старый искатель будет все еще использовать актуальные мягко переданные документы, пока новый искатель не будет согрет?
добавлено автор Jeff Gran, источник
Я полагаю, что будет некоторая задержка, когда вы начнете автопотепление с холодного выключенного искателя, но можно экспериментировать, чтобы найти хороший баланс между двумя. Кроме того, вы могли бы хотеть позволить автотеплый тайник, особенно для фильтров: (дополнительную информацию см. в wiki.apache.org/solr/SolrCaching#autowarmCount),
добавлено автор spyk, источник
Относительно вашей секунды редактируют, я думаю, что ваш случай подобен этому: stackoverflow.com/questions/21565988/…, который также указывает на автопотепление.
добавлено автор spyk, источник

TrieIntField with a precisionStep is optimized for range queries. As you're only searching for a specific value your field type is optimal.

Have you looked at autowarming queries? These run whenever a new IndexSearcher is being created (on startup, on an index commit for example), so that it becomes available with some cache already in place. Depending on your requirements, you can also set useColdSearcher flag to true, so that the new Searcher is only available when the cache has been warmed. For more details have a look here: https://cwiki.apache.org/confluence/display/solr/Query+Settings+in+SolrConfig#QuerySettingsinSolrConfig-Query-RelatedListeners

4
добавлено
Кроме того, пожалуйста, посмотрите, что моя секунда редактирует к вопросу: это относится к тайнику аспекта также? Какой тайник я должен автонагреть для того типа вопроса?
добавлено автор Jeff Gran, источник
Я думаю, что можно быть на правильном пути. Я не использую автопотепления в настоящее время. Одно из моих требований - то, что любые дополнения или обновления любых документов немедленно доступны. Если я использую автопотепление и отпуск на "искателе холода использования", который сделает то, в чем я нуждаюсь? Старый искатель будет все еще использовать актуальные мягко переданные документы, пока новый искатель не будет согрет?
добавлено автор Jeff Gran, источник
Я полагаю, что будет некоторая задержка, когда вы начнете автопотепление с холодного выключенного искателя, но можно экспериментировать, чтобы найти хороший баланс между двумя. Кроме того, вы могли бы хотеть позволить автотеплый тайник, особенно для фильтров: (дополнительную информацию см. в wiki.apache.org/solr/SolrCaching#autowarmCount),
добавлено автор spyk, источник
Относительно вашей секунды редактируют, я думаю, что ваш случай подобен этому: stackoverflow.com/questions/21565988/…, который также указывает на автопотепление.
добавлено автор spyk, источник

TrieIntField with a precisionStep is optimized for range queries. As you're only searching for a specific value your field type is optimal.

Have you looked at autowarming queries? These run whenever a new IndexSearcher is being created (on startup, on an index commit for example), so that it becomes available with some cache already in place. Depending on your requirements, you can also set useColdSearcher flag to true, so that the new Searcher is only available when the cache has been warmed. For more details have a look here: https://cwiki.apache.org/confluence/display/solr/Query+Settings+in+SolrConfig#QuerySettingsinSolrConfig-Query-RelatedListeners

4
добавлено
Кроме того, пожалуйста, посмотрите, что моя секунда редактирует к вопросу: это относится к тайнику аспекта также? Какой тайник я должен автонагреть для того типа вопроса?
добавлено автор Jeff Gran, источник
Я думаю, что можно быть на правильном пути. Я не использую автопотепления в настоящее время. Одно из моих требований - то, что любые дополнения или обновления любых документов немедленно доступны. Если я использую автопотепление и отпуск на "искателе холода использования", который сделает то, в чем я нуждаюсь? Старый искатель будет все еще использовать актуальные мягко переданные документы, пока новый искатель не будет согрет?
добавлено автор Jeff Gran, источник
Я полагаю, что будет некоторая задержка, когда вы начнете автопотепление с холодного выключенного искателя, но можно экспериментировать, чтобы найти хороший баланс между двумя. Кроме того, вы могли бы хотеть позволить автотеплый тайник, особенно для фильтров: (дополнительную информацию см. в wiki.apache.org/solr/SolrCaching#autowarmCount),
добавлено автор spyk, источник
Относительно вашей секунды редактируют, я думаю, что ваш случай подобен этому: stackoverflow.com/questions/21565988/…, который также указывает на автопотепление.
добавлено автор spyk, источник

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

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

/solr/q=*:*&fq={!cache=false}parent_id_s:42
2
добавлено
если я понимаю правильно, я предполагаю, что есть not' t, что много уникальных parent_id? если так, кэширование его имело бы полный смысл. Учитывая размер индекса, я предполагаю, что он имеет соответствующий объем памяти в наличии. Так или иначе Бабушка @Jeff, просто дайте нам процент совпадений, который вы имеете (и количество фильтров, которые вы прячете про запас прямо сейчас) иметь лучшую информацию.
добавлено автор Persimmonium, источник
@femtoRgon That' s хорошая мысль, но это doesn' t запрашивают мой случай. Путем наша система используется, оказывается, что мы заканчиваем тем, что использовали тот же самый fq для многих вопросов подряд. И когда тайник населен, системные пробеги, сверкающие быстро. Когда тайник свален из-за передавания, этот вопрос (даже тестовый сценарий с ТОЛЬКО этим fq) может занять до 20 секунд. Так I' m пытающийся выяснить, как ускорить тот начальный вопрос, который населяет тайник.
добавлено автор Jeff Gran, источник

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

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

/solr/q=*:*&fq={!cache=false}parent_id_s:42
2
добавлено
если я понимаю правильно, я предполагаю, что есть not' t, что много уникальных parent_id? если так, кэширование его имело бы полный смысл. Учитывая размер индекса, я предполагаю, что он имеет соответствующий объем памяти в наличии. Так или иначе Бабушка @Jeff, просто дайте нам процент совпадений, который вы имеете (и количество фильтров, которые вы прячете про запас прямо сейчас) иметь лучшую информацию.
добавлено автор Persimmonium, источник
@femtoRgon That' s хорошая мысль, но это doesn' t запрашивают мой случай. Путем наша система используется, оказывается, что мы заканчиваем тем, что использовали тот же самый fq для многих вопросов подряд. И когда тайник населен, системные пробеги, сверкающие быстро. Когда тайник свален из-за передавания, этот вопрос (даже тестовый сценарий с ТОЛЬКО этим fq) может занять до 20 секунд. Так I' m пытающийся выяснить, как ускорить тот начальный вопрос, который населяет тайник.
добавлено автор Jeff Gran, источник

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

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

/solr/q=*:*&fq={!cache=false}parent_id_s:42
2
добавлено
если я понимаю правильно, я предполагаю, что есть not' t, что много уникальных parent_id? если так, кэширование его имело бы полный смысл. Учитывая размер индекса, я предполагаю, что он имеет соответствующий объем памяти в наличии. Так или иначе Бабушка @Jeff, просто дайте нам процент совпадений, который вы имеете (и количество фильтров, которые вы прячете про запас прямо сейчас) иметь лучшую информацию.
добавлено автор Persimmonium, источник
@femtoRgon That' s хорошая мысль, но это doesn' t запрашивают мой случай. Путем наша система используется, оказывается, что мы заканчиваем тем, что использовали тот же самый fq для многих вопросов подряд. И когда тайник населен, системные пробеги, сверкающие быстро. Когда тайник свален из-за передавания, этот вопрос (даже тестовый сценарий с ТОЛЬКО этим fq) может занять до 20 секунд. Так I' m пытающийся выяснить, как ускорить тот начальный вопрос, который населяет тайник.
добавлено автор Jeff Gran, источник

Я также думаю, что вопрос фильтра не помогает в этом случае. q=parent_id_s:42 должен подвергнуть сомнению индекс термином "parent_id_s:42" и получить ряд ид документа. Так как регистрации (иды документа) внесены в указатель термином и предположением, что у вас есть достаточно памяти, чтобы держать это (или в JVM или в тайнике OS), тогда этот поиск должен быть довольно быстрым.

Принятие тайника фильтра уже подогревается, и у вас есть 100%-й процент совпадений, какой следующего быстрее?

q=parent_id_s:42
fq=parent_id_s:42

Я думаю, что они очень близки. Но я мог быть неправым. Кто-либо знает? Кто-либо знает, управлял тестом производительности для этого?

0
добавлено

Я также думаю, что вопрос фильтра не помогает в этом случае. q=parent_id_s:42 должен подвергнуть сомнению индекс термином "parent_id_s:42" и получить ряд ид документа. Так как регистрации (иды документа) внесены в указатель термином и предположением, что у вас есть достаточно памяти, чтобы держать это (или в JVM или в тайнике OS), тогда этот поиск должен быть довольно быстрым.

Принятие тайника фильтра уже подогревается, и у вас есть 100%-й процент совпадений, какой следующего быстрее?

q=parent_id_s:42
fq=parent_id_s:42

Я думаю, что они очень близки. Но я мог быть неправым. Кто-либо знает? Кто-либо знает, управлял тестом производительности для этого?

0
добавлено