Подтвердить что ты не робот

Поле даты датца sr Дата и дата?

Итак, у меня есть вопрос о типах полей типа Solr, который довольно прямолинейный: какая разница между полем "дата" и "tdate"?

Схема .xml утверждает, что "для запросов с более высоким диапазоном, рассмотрите тип tdate и поле даты на основе Trie для более быстрых запросов диапазона дат и датирования. ' Достаточно справедливо... но что такое precisionStep = "6"? я должен это изменить? изменяет ли он способ создания запроса в случае использования tdate? Какое реальное преимущество или что делает Solr, делает это лучше?

P.S прошли через google, Solr manual, solr wiki и java-документы без всякой удачи, поэтому я буду благодарен за добрый и пояснительный ответ:)... Также проверено: http://www.lucidimagination.com/blog/2009/05/13/exploring-lucene-and-solrs-trierange-capabilities/ http://web.archiveorange.com/archive/v/AAfXfqRYyLnDFtskmLRi

4b9b3361

Ответ 1

Хороший вопрос:-)! Я прочитал хороший ответ где-то, к сожалению, не могу найти это снова.

В основном диапазоны trie бывают быстрее. Здесь - одно объяснение. С помощью функции precisionStep вы определяете, насколько ваш индекс может расти, чтобы получить преимущества по производительности. Чтобы процитировать ссылку, которую вы имеете в виду:

"Что еще более важно, это не зависит от размера индекса, а вместо него выбрана точность".

и

"единственные недостатки TrieRange - это немного большие размеры индекса, поскольку дополнительные термины индексируются"

Ответ 2

Поля Trie быстрее задают запросы диапазона, предварительно вычисляя определенные результаты диапазона и сохраняя их как одну запись в индексе. Для ясности мой пример будет использовать целые числа в базе десять. Эта же концепция применяется ко всем типам trie. Сюда относятся даты, так как дата может быть представлена ​​как количество секунд, например, 1970 г.

Скажем, мы индексируем число 12345678. Мы можем обозначить это в следующих токенах.

12345678
123456xx
1234xxxx
12xxxxxx

Ток 12345678 представляет фактическое целочисленное значение. Знаки с цифрами x представляют диапазоны. 123456xx представляет диапазон от 12345600 до 12345699 и соответствует всем документам, содержащим токен в этом диапазоне.

Обратите внимание, что в каждом токене в списке последовательно больше x цифр. Это контролируется шагом точности. В моем примере вы можете сказать, что я использовал прецизионный шаг 2, так как я обрезаю 2 цифры, чтобы создать каждый дополнительный токен. Если бы я использовал прецизионный шаг 3, я бы получил эти жетоны.

12345678
12345xxx
12xxxxxx

Точный шаг 4:

12345678
1234xxxx

Шаг точности 1:

12345678
1234567x
123456xx
12345xxx
1234xxxx
123xxxxx
12xxxxxx
1xxxxxxx

Легко видеть, как меньший шаг точности приводит к большему количеству токенов и увеличивает размер индекса. Однако он также ускоряет запросы диапазона.

Без поля trie, если бы я хотел запросить диапазон от 1250 до 1275, Lucene должен был бы получить 25 записей (1250, 1251, 1252,..., 1275) и объединить результаты поиска. С полем trie (и шагом точности 1), мы могли бы уйти с извлечением 8 записей (125x, 126x, 1270, 1271, 1272, 1273, 1274, 1275), поскольку 125x представляет собой предварительно вычисленное агрегирование 1250 - 1259. Если бы я использовал шаг точности, превышающий 1, запрос вернется к извлечению всех 25 отдельных записей.

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

Ответ 3

Лучше всего просто посмотреть исходный код. Некоторые из вещей для Solr плохо документированы, и самый быстрый способ получить надежный ответ - просто посмотреть на код. Если вы еще не были в коде, это тоже в вашу пользу. По крайней мере, в конечном итоге.

Здесь ссылка на TrieTokenizerFactory.

http://www.jarvana.com/jarvana/view/org/apache/solr/solr-core/1.4.1/solr-core-1.4.1-sources.jar!/org/apache/solr/analysis/TrieTokenizerFactory.java?format=ok

javadoc в классе, по крайней мере, намекает на цель precisionStep. Вы могли бы копаться дальше.

ИЗМЕНИТЬ: Я выкопал еще немного для вас. Он передается непосредственно классу Lucene NumericTokenStream, который будет использовать значение во время разбора потока токенов. Возможно, стоит поближе рассмотреть. Это, по-видимому, касается детализации и, вероятно, является компромиссом между размером индекса и скоростью.