Solr: запрос точной фразы с EdgeNGramFilterFactory

В Solr (3.3), возможно ли сделать поле доступным для побуквенного поиска через EdgeNGramFilterFactory , а также чувствительным составить запросы?

Например, я ищу поле, которое, если оно содержит «contrat informatique», будет найдено, если пользователь введет:

  • contrat
  • informatique
  • contr
  • informa
  • "contrat informatique"
  • "contrat info"

В настоящее время я сделал что-то вроде этого:

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

7
задан Triad sou. 1 October 2011 в 07:50
поделиться