Схема Solr для поиска префиксов, как? - PullRequest
1 голос
/ 11 января 2012

Я прочитал много вопросов из stackoverflow, но не нашел ответа, как сделать поиск по префиксу Solr. Например, у меня есть текст: «документация solr нечитабельна», и мне нужно найти что-то вроде этого: «solr document *», «документация не прочитана *», «нечитаемо таково», но не «un * so *» Я делаю что-то вроде этого:

<fieldType name="prefix_search" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.LowerCaseTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="30" side="front"/>
  </analyzer>
</fieldType>

но иногда он возвращает неожиданные результаты, а также работает с запросом "un * so *". Может быть проблема с PHP SolrClient? Спасибо за ответ!

1 Ответ

1 голос
/ 17 января 2012

ReversedWildcardFilterFactory - это именно то, что вам нужно, тогда его можно легко проверить с помощью curl следующим образом:

curl 'http://example.com:8080/solr/select?q=prefix_search:un*+AND+prefix_search:so*'

<!-- Just like text_general except it reverses the characters of
     each token, to enable more efficient leading wildcard queries. -->
<fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
       maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
...