1

hibernate-search-3.2.1.Finalを使用しており、入力を帯状疱疹に解析したいと思います。ドキュメントで確認できることから、ShingleAnalyzerWrapperはまさに私が必要としていたもののようです。私は、ShingleAnalyzerWrapperのデフォルトのアナライザーとして、WhitespaceAnalyzer、StandardAnalyzer、およびSnowballAnalyzerの両方でテストしました。

Version luceneVersion = Version.LUCENE_29;
SnowballAnalyzer keywordAnalyzer= new SnowballAnalyzer(luceneVersion, "English", StopAnalyzer.ENGLISH_STOP_WORDS_SET);
ShingleAnalyzerWrapper shingleAnalyzer = new ShingleAnalyzerWrapper(keywordAnalyzer, 4);
shingleAnalyzer.setOutputUnigrams(false);
QueryParser keywordParser = new QueryParser(luceneVersion, "keyword", keywordAnalyzer);
Query keywordQuery = keywordParser.parse(QueryParser.escape(keyword.toLowerCase()));

ただし、クエリは空に戻りました。「helloworld、this isLucene」のようなキーワードが帯状疱疹になることを期待していました[helloworldthis is、world this is lucene、this is lucene]

私のShingleAnalyzerWrapperの期待と使用法が正しいかどうか教えてください。

ありがとう、ライアン

4

2 に答える 2

2

コピー/貼り付けエラーかもしれませんが、コード スニペットでは、変数 keywordAnalyzer をクエリ パーサーに渡しているため、shingleAnalyzer は実際には使用されていません。インデックス作成時にどのアナライザーを使用していますか?

ストップ ワードを除外するアナライザーを ShingleAnalyzerWrapper のデリゲート アナライザーとして使用する場合、ストップ ワード (この例では "this" と "is") は、シングル アナライザーがシングルを作成する前に削除されます。

アナライザーをデバッグする良い方法は、「Lucene in Action」で説明されている AnalyzerUtils のようなものを使用することです。ここでサンプル コードを取得できます: http://java.codefetch.com/example/in/LuceneInAction/src/lia/analysis/AnalyzerUtils.java

ニキータ

于 2011-06-30T13:37:53.260 に答える
1

ありがとうニキータ!はい、コピー アンド ペースト エラーでしたが、正しいバージョンでも正しい結果が得られます。

次のコードを使用して帯状疱疹を生成できたので、AnalyzerUtils のリンクは大きな助けになりました。

ShingleAnalyzerWrapper shingleAnalyzer = new ShingleAnalyzerWrapper(4);
shingleAnalyzer.setOutputUnigrams(false);

TokenStream stream = shingleAnalyzer.tokenStream("contents", new StringReader("red dress shoes with black laces"));
ArrayList tokenList = new ArrayList();
while (true) {
    Token token = null;
    try {
        token = stream.next();
    } catch (IOException e) {
        e.printStackTrace();  
    }
    if (token == null) break;
        tokenList.add(token);
}

生成するもの:

[(red dress,0,9,type=shingle), (red dress shoes,0,15,type=shingle,posIncr=0), (red dress shoes black,0,26,type=shingle,posIncr=0), (dress shoes,4,15,type=shingle), (dress shoes black,4,26,type=shingle,posIncr=0), (dress shoes black laces,4,32,type=shingle,posIncr=0), (shoes black,10,26,type=shingle), (shoes black laces,10,32,type=shingle,posIncr=0), (black laces,21,32,type=shingle)]

問題は、ShingleAnalyzerWrapper 自体ではなく、QueryParser にありました。根本的な原因を突き止めるには、さらに掘り下げる必要がありますが、どこから始めればよいかわかりました。

于 2011-07-06T18:25:20.157 に答える