Почему я должен ставить ИЛИ между каждым числом в длинной строке запроса? - PullRequest
2 голосов
/ 11 февраля 2012

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

Скажем, например, у меня есть документ с полем (fieldtype: text_ws) с именем "ids", который содержит следующую строку.

23 128 150 250 384 582 583 586 587 589 641 713 745 761 1004 1040 1080 1512 1551 1626 1882 1891 1911 1912 1913 1947 2035 2120 2140 2141 2143 2176 2219 2430 3023 3041 4087 4221 4243 4737 4776 5126 5130 5194 5224 5225 5226 5555 5564 5565 5568 5611 6310 9984 12048 12143 12878 12929 12930 12931 12933 12935 14001 14048 14049 14051 14079 14080 14082 14083

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

23 128 150 250 384 582 583 586 587 589 641 713 745 761 1004 1040 1512 1551 1626 1703 1760 1882 1891 1911 1913 1947 2035 2120 2140 2141 2143 2176 2219 2430 3023 3041 4087 4221 4243 4737 4776 5126 5130 5194 5224 5225 5226 5555 5564 5565 5568 5611 6310 9984 12048 12143 12878 12929 12930 12931 12933 12935 14001 14048 14049 14051 14079 14080 14082 14083

Какое это имеет место?

Кроме того, как я могу предотвратить повышение оценки Solr?Что если я просто хочу узнать, какой процент элементов в запросе соответствует?

определение text_ws

<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  </analyzer>
</fieldType>

1 Ответ

2 голосов
/ 12 февраля 2012

Если вы запрашиваете -
например q=ids:23 128, только 23 идентификатора поля запрашиваются для 23, а поле поиска по умолчанию, указанное в schema.xml (обычно текст), запрашивается для 128.
Сформирован запрос ids:23 text:128, поэтому для первого члена будут запрошены только идентификаторы, а для остальных - в текстовом поле по умолчанию.

Как вы обращаетесь с OR? Если q = ids: (23 ИЛИ 128), оно будет соответствовать всему полю идентификаторов.

Вы можете использовать параметр debugQuery для проверки запроса, созданного Solr.

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