Как определить тип поля для индексации SOLR?

У меня есть два табличных поля в таблице MySQL. Один из них – VARCHAR и является «заголовком» для классифицированного (веб-сайта объявлений). Другое поле TEXT, которое содержит «текст» для классифицированного.

Два вопроса:
Как определить, как индексировать эти два поля? (какой тип поля, какие классы использовать и т. д.)

В настоящее время у меня есть «ad_id» как уникальный идентификатор для каждого объявления, например «bmw_m3_82398292».
Как я могу заставить SOLR возвращать этот идентификатор всякий раз, когда SOLR находит «совпадение запросов»? (Первая часть идентификатора – это фактически содержимое полей заголовка, вторая часть – случайное число)

благодаря

Related of "Как определить тип поля для индексации SOLR?"

1. Схема

Ваша схема Solr очень сильно зависит от вашего предполагаемого поведения поиска. В файле schema.xml вы увидите множество вариантов, таких как «текст» и «строка». Они ведут себя по-другому.

<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 

Тип строкового поля – это буквальное совпадение строк. Он будет работать как == в выражении SQL.

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

Тип поля text_ws делает токенизацию. Однако большая разница в text поле – это фильтры для стоп-слов и разделителей и нижнего корпуса. Обратите внимание, как эти фильтры назначаются как для индекса Lucene, так и для запроса Solr. Поэтому при поиске в текстовом поле он будет адаптировать условия запроса с помощью этих фильтров, чтобы найти совпадение.

 <fieldtype name="text" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> <filter ..... /> <filter ..... /> <filter ..... /> </analyzer> </fieldtype> 

Например, при индексировании таких вещей, как новости, вы, вероятно, захотите искать названия компаний и заголовки по-разному.

 <field name="headline" type="text" /> <field name="coname" type="string" indexed="true" multiValued="false" omitNorms="true" /> 

Вышеприведенный пример позволит вам выполнить поиск типа &coname:Intel&headline:processor+specifications а также получить совпадения, отражающие только истории Intel.

Если вы хотите найти диапазон

2. Поля результата

Вы можете определить стандартный набор полей возврата в RequestHandler

 <requestHandler name="mumble" class="solr.DisMaxRequestHandler" > <str name="fl"> category,coname,headline </str> </requestHandler> 

Вы также можете определить нужные поля в строке запроса, используя параметр fl :

 /select?indent=on&version=2.2&q=coname%3AIn*&start=0&rows=10&fl=coname%2Cid&qt=standard 

Вы также можете выбрать диапазоны в своих запросах, используя field:[x TO *] . Если вы хотите выбрать определенные объявления по дате, вы можете создать запрос с помощью

 ad_date:[20100101 TO 20100201] 

в ваших запросах. (Существует много способов поиска диапазонов, я представляю метод, который использует целые числа вместо класса Date.)