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