2014-11-10 3 views
1

My schema.xml для Solr имеет много целых полей.Solr Поиск подстановочных знаков по int field

Как сделать групповой поиск для полей int? У меня есть много dyanamic полей для значений int, как показано ниже.

<dynamicField name="*_nbr" type="int" stored="true"/> 

например: У меня есть поле, называемое store_nbr, и я хочу, чтобы найти все магазины, которые начинаются с 280. я попытался дать store_nbr:280*, но он не дал никаких результатов. Точно так же у меня много таких целочисленных полей.

ответ

0

см. this ответ. Вы должны добавить директивную ссылку в свой schema.xml в {solr_home}/example/solr/your_collection /conf/schema.xml, как показано в этом ответе. Скопируйте все свои поля, чтобы их можно было искать для подстановочных запросов.

3

В то время как ответ от @Kumar намекает в правильном направлении (но не используйте текстовое поле по умолчанию для schema.xml для этого, так как он будет обрабатывать любые данные как при запросе, так и при индексировании), поясняется следующее: вам может понадобиться новое поле для выполнения запросов wild card, если вы не можете преобразовать свой запрос в действительную целочисленную операцию (если все ваши store_nbr-s имеют одинаковую длину).

Добавить StrField (в schema.xml по умолчанию, есть определенный тип с именем «строка», что это простая строка поле, костюмы для этой цели):

<field name="store_nbr_s" type="string" indexed="true" stored="false" /> 

Добавить copyField директиву, которая копирует значение из store_nbr поля в поле строки при индексации:

<copyField source="store_nbr" dest="store_nbr_text" /> 

Тогда запрос против этого поля для префиксов спичек, используя синтаксис, уже описанный (store_nbr:280*).

Если этот конкретный формат запроса (запрос для трех первых цифр store_nbr) очень распространен, вы захотите преобразовать контент на пути, чтобы индексировать три первые цифры в выделенном поле, вы получите лучшую производительность запросов и меньший кеш.

И если вы делаете много диких карточных запросов (с различной длиной перед *), посмотрите, чтобы вместо этого было создано поле EdgeNGrams, так как это даст вам выделенные токены, которые solr ищет вместо того, чтобы поиск по диким картам, который, возможно, должен пройти через больший набор возможных токенов, чтобы определить, должен ли документ быть возвращен.

+0

У вас отсутствует тег close for 'copyField':' ' –

+0

@ peter-b Спасибо, исправлено. – MatsLindh

+0

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