0

テキストメッセージを格納するインデックスを(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の経験がほとんどないので、どんな助けでも大歓迎です:)

4

1 に答える 1

0

クエリを実行していたフィールドは、solr schema.xmlでタイプ「text」として定義されていました(以前のコメントで誤って述べたように、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>

それは私に必要な振る舞いを与えます。

于 2011-04-14T01:15:12.357 に答える