В Solr, почему «построено» не означает «строить», а «строить»? - PullRequest
3 голосов
/ 18 августа 2011

Я пытаюсь выяснить две вещи в этой публикации:

  1. Почему 'build' NOT ограничено 'build', хотя полеВ определении типа определен стеммер.Тем не менее, «строительство» сводится к «сборка»

  2. Как использовать Люка, чтобы изучить индекс, чтобы увидеть, какие слова были получены и для чего.Я не мог видеть, как «здание» останавливается, «строится» в Люке.Я знаю, что Lucene справляется с этим, потому что я могу успешно получить строку с помощью команды "build", выполнив поиск по запросу "build".

Эта ссылка была довольно полезной, ноне ответил на мои вопросы.

Для справки, вот части schema.xml.

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <!-- Case insensitive stop word removal.
      add enablePositionIncrements=true in both the index and query
      analyzers to leave a 'gap' for more accurate phrase queries.
    -->
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    -->
    <filter class="solr.PorterStemFilterFactory"/>
  </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_en.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    -->
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

и определение поля:

<field name="features" type="text_en" indexed="true" stored="true" multiValued="true"/>

Набор данныхсостоит из нескольких документов, 1 документ имеет «здание» в поле функций, 1 документ имеет «встроенный» в том же поле, и 1 документ имеет «встроенный» в поле функций:

файл: hd.xml:

<field name="features">building NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor</field>

file ipod_video.xml:

<field name="features">Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication</field>

file sd500.xml:

 <field name="features">built in flash, red-eye reduction</field>

Используя Lukeall-3.3.0, эторезультат, который я получаю от поиска «функции: сборка».Обратите внимание, что я получаю обратно 1 (вместо ожидаемых 3 документов) enter image description here Даже в этом одном документе я не вижу основы, т. Е. Вижу только оригинальное слово 'building', как показано: enter image description here

и, снова в Luke, в поиске «features: built» возвращает два документа: enter image description here

При выборе одного из них отображается исходное «build», но не «build».enter image description here

1 Ответ

2 голосов
/ 18 августа 2011

В исключительных случаях, таких как этот, вы можете настроить алгоритм стволов с помощью StemmerOverrideFilter

...