Solr queryparser для индексов lucene? - PullRequest
0 голосов
/ 14 апреля 2011

Я создал индекс (используя Lucene 2.9), в котором хранятся текстовые сообщения. (документы также содержат некоторые другие метаданные, которые не индексируются, а хранятся). Я использую StandardAnalyzer для анализа этих сообщений. Я пытаюсь запустить некоторые тесты для этого индекса с помощью Solr (я заменил индекс примера приложения своим индексом), чтобы увидеть, какие результаты я получаю от различных запросов.

Когда я попробовал следующий запрос, я получил 0 результатов

"text:happiness"

Однако изменение этого значения на "text:happiness*" дает мне некоторые результаты. Все они содержат такие термины, как "happiness,", "happiness." и т. Д. Поэтому я подумал, что это проблема с токенизацией при создании индекса, однако, когда я использовал Luke (инструмент отладки индекса lucene) для выполнения того же запроса (text:happiness), я получил точный те же результаты, которые я получаю для счастья * от Solr, что заставило меня поверить, что проблема заключается не в индексации, а в том, как я определяю свой запрос Solr. Я посмотрел на файл solrconfig.xml и заметил, что в нем есть следующая строка (с комментариями), я попытался раскомментировать его, а затем изменил свой запрос на использование «defType = lucene» в дополнение к исходному запросу, но получил те же результаты.

  <queryParser name="lucene" class="org.apache.solr.search.LuceneQParserPlugin"/>

У меня очень мало опыта работы с Solr, поэтому любая помощь очень ценится:)

1 Ответ

0 голосов
/ 14 апреля 2011

Поле, к которому я обращался, было определено как тип "text" в solr schema.xml (не solrconfig.xml, как я неправильно упомянул в своем предыдущем комментарии).Вот соответствующий фрагмент из schema.xml

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <!-- 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.
        -->

Я заменил его следующим:

<fieldType name = "text" class="solr.TextField">
      <analyzer class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
    </fieldType>

, что дает мне необходимое поведение.

...