2013-05-22 4 views
0

На solr 4, я делаю запрос для слова «черный», и он возвращает мне результаты единственного продукта, которые имеют точное слово - «черный» в имени & desc , Я ищу только имя и описание.Поиск слова в строке в Solr 4

Тем не менее, есть много слов, которые я хочу включить в результаты поиска .. как результат должен включать в себя: Jadeblack, Superblack, blackblue, nightblack и другие слова, которые имеют черный цвет в строке anytwhere, а не только слово black ,

Однако такие результаты имеют меньшее значение и должны быть ранжированы после результатов, имеющих слово «черный».

Можете ли вы посоветовать, как мне изменить, чтобы получить такие результаты.

ответ

2

Предлагает использовать два поля. Скопируйте поле text_exact в поле text_ngram.

  1. text_exact - Точное совпадение, которое будут повышены более высокий
  2. text_ngram - An ngram поле, которое поможет вам соответствовать частичные совпадения с повышением ниже, чем точное соответствие

Вы можете настроить подталкивание as text_exact^2 text_ngram^0.5

+0

Благодарим вас за ответ. Вы предложили бы выполнить поиск по шаблону, предложенный Werzi2001 или поисковой программой в соответствии с вашим предложением. Я новичок в этом и пытаюсь понять, что будет лучше. Спасибо – Krunal

+1

Подстановочные знаки медленнее и накладные расходы. Предлагал бы использовать ngrams, поскольку он выполняется во время индекса, поэтому поиск будет намного быстрее. – Jayendra

+0

Благодарим за быстрый ответ. Я хотел бы попробовать с этим. +1 – Krunal

0

Вы можете использовать подстановочные знаки в своем поисковом выражении в поле типа строки. Например:

name:*black* OR description:*black* 

С помощью этого поиска вы получите результаты, которые имеют «черный» в «имя» или «описание», и он не должен быть точным соответствием. Чтобы сортировать по качеству матча, я думаю, вам нужно будет определить толчок для точного соответствия и сортировки по результату. Но этого я еще не сделал.

На всякий случай вы еще не знали. По умолчанию поиск по строкам типа зависит от регистра. Таким образом, вы не найдете совпадений для «черного» (за исключением того, что у вас действительно есть документ, где он написан в случае с капиталом). Чтобы изменить это поведение, необходимо определить свой собственные регистрозависимости типа строки:

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Но это не работает для дика поиска карт (как для «черного»). В этом случае вам придется преобразовать каждый термин поиска, который должен включать подстановочные знаки в нижний регистр перед отправкой в ​​solr.

Другим решением может быть использование другого типа (например, «текст») вместо «строка».