2

Lucene を使用してデータベースのインデックスを作成し、特定のフィールド (フィールド名: キーワード) でフレーズ検索を実行しています。現在、次のコードを使用しています。

        String userQuery = request.getParameter("query");
        //create standard analyzer object
        analyzer = new StandardAnalyzer(Version.LUCENE_30);
                    Analyzer analyze=AnalyzerUtil.getPorterStemmerAnalyzer(analyzer);
        //create File object of our index directory
        File file = new File(LUCENE_INDEX_DIRECTORY);
        //create index reader object
        reader = IndexReader.open(FSDirectory.open(file),true);
        //create index searcher object
        searcher = new IndexSearcher(reader);
        //create topscore document collector
        collector = TopScoreDocCollector.create(1000, false);
        //create query parser object
        parser = new QueryParser(Version.LUCENE_30,"keyword", analyze);
                    parser.setAllowLeadingWildcard(true);
        //parse the query and get reference to Query object
        query = parser.parse(userQuery);
        //********Line 1***********************
                    //search the query
        searcher.search(query, collector);
        hits = collector.topDocs().scoreDocs;
        //check whether the search returns any result
        if(hits.length>0){//Code to retrieve hits}

このコードはステミングには問題なく機能しますが、「Man」と入力して lucene インデックスに「male」というエントリがある場合のように、クエリを拡張して同義語検索を実行したいと考えています。 . 上記のコードの 1 行目にこれを追加しようとしましたが 、結果は得られません。また、「信じられない」の代わりに「信じられない」と入力しても結果が得られるスペル チェックを導入したいと考えています。query=SynExpand.expand(userQuery,
searcher, analyze,"keyword",serialVersionUID);

同義語の展開が機能しない理由と、スペルチェックの方法がわかりません。誰かが私を案内してくれたら、本当に感謝しています。

ありがとう!

4

1 に答える 1

4

あいまい検索は、クエリ キーワード修飾子、つまりチルダを追加することで実行できます。

keyword:ubelievable~

詳細および興味のある他の種類のクエリについては、 「 Lucene パーサーの構文」を参照してください。

シノニムを処理するには 2 つの方法があります。使用しようとしているクエリ拡張は、 WordNetに依存しています。SynExpandのドキュメントにあるように、まず Syns2Index を呼び出して展開を使用する必要があります。これは簡単な方法ですが、英単語のみで機能します。

複数の言語のサポートを追加したり、独自のシノニムを追加したりする必要がある場合は、インデックス作成中にシノニム インジェクションを使用できます。アイデアは、独自の辞書から索引付けされたドキュメントに同義語を挿入する独自のアナライザーを作成することです。これを実装するのは難しいように聞こえるかもしれませんが、幸いなことにLucene in Action book に優れた例があります (ソース コードは無料で入手できlia.analysis.synonymます。パッケージを参照してください。ただし、この素敵な本のコピーを入手することを強くお勧めします)。

于 2011-08-13T22:41:30.607 に答える