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



php sql (1)

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.)

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

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

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

Спасибо





solr