В Solr (3.3), возможно ли сделать поле доступным для побуквенного поиска через EdgeNGramFilterFactory
, а также чувствительным составить запросы?
Например, я ищу поле, которое, если оно содержит «contrat informatique», будет найдено, если пользователь введет:
В настоящее время я сделал что-то вроде этого:
<fieldtype name="terms" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldtype>
... но это не удалось при запросах фраз.
Когда я смотрю в анализатор схемы в solr admin, я обнаруживаю, что "contrat informatique" сгенерировал следующие токены:
[...] contr contra contrat in inf info infor inform [...]
Таким образом, запрос работает с "contrat in" (последовательные токены), но не с "contrat inf" ( потому что эти два токена разделены).
Я почти уверен, что любой вид стемминга может работать с фразовыми запросами, но я не могу найти подходящий токенизатор фильтра для использования до EdgeNGramFilterFactory
.