2012-03-15 19 views
2

次のアルゴリズムを使用して、単語自体のオフセットを取得することはできません。どんな助けもありがとうございますLucene - simpleAnalyzer - 一致する単語を取得するには?

... 
    Analyzer analyzer = new SimpleAnalyzer(); 
    MemoryIndex index = new MemoryIndex(); 

    QueryParser parser = new QueryParser(Version.LUCENE_30, "content", analyzer); 

    float score = index.search(parser.parse("+content:" + target)); 

    if(score > 0.0f) 
     System.out.println("How to know matched word?"); 

答えて

2

ここでは、メモリインデックスと検索例の全体を示します。私は自分のために書き込んだだけで、完璧に動作します。私はあなたがメモリにインデックスを格納する必要があることを理解していますが、なぜそのためにが必要なのでしょうか?代わりにRAMDirectoryを使用するだけでインデックスがメモリに保存されるので、検索を実行すると、インデックスはRAMDirectory(メモリ)からロードされます。

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_34); 
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, analyzer); 
    RAMDirectory directory = new RAMDirectory(); 
    try { 
     IndexWriter indexWriter = new IndexWriter(directory, config); 
     Document doc = new Document(); 
     doc.add(new Field("content", text, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_OFFSETS)); 
     indexWriter.addDocument(doc); 
     indexWriter.optimize(); 
     indexWriter.close(); 

     QueryParser parser = new QueryParser(Version.LUCENE_34, "content", analyzer); 
     IndexSearcher searcher = new IndexSearcher(directory, true); 
     IndexReader reader = IndexReader.open(directory, true); 

     Query query = parser.parse(word); 
     TopScoreDocCollector collector = TopScoreDocCollector.create(10000, true); 
     searcher.search(query, collector); 
     ScoreDoc[] hits = collector.topDocs().scoreDocs; 
     if (hits != null && hits.length > 0) { 
      for (ScoreDoc hit : hits) { 
       int docId = hit.doc; 
       Document hitDoc = searcher.doc(docId); 

       TermFreqVector termFreqVector = reader.getTermFreqVector(docId, "content"); 
       TermPositionVector termPositionVector = (TermPositionVector) termFreqVector; 
       int termIndex = termFreqVector.indexOf(word); 
       TermVectorOffsetInfo[] termVectorOffsetInfos = termPositionVector.getOffsets(termIndex); 

       for (TermVectorOffsetInfo termVectorOffsetInfo : termVectorOffsetInfos) { 
        concordances.add(processor.processConcordance(hitDoc.get("content"), word, termVectorOffsetInfo.getStartOffset(), size)); 
       } 
      } 
     } 

     analyzer.close(); 
     searcher.close(); 
     directory.close(); 
+0

こんにちは、ご意見ありがとうございます。サンプルをmemoryIndex用に変換できますか?そのため、私はフルテキスト検索にmemoryIndexを使用しています。コード内のヒットやドキュメントを使用することはできません。 – Javatar

+0

私は自分の答えを編集しました。 –

+0

こんにちは、ありがとう、私はパフォーマンスとメモリの問題のために私は、MemoryIndex RAMDirectoryよりも効率的かつ便利であることを学んだので、私はMemoryIndexを使用するのが好きです。 – Javatar

関連する問題