Ответ 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.)