1

Luceneでの検索語の強調表示に関するチュートリアルをいくつか読み、次のようなコードを思いつきました。

(...)
query = parser.parse(query_string)

for scoreDoc in  searcher.search(query, 50).scoreDocs:
    doc = searcher.doc(scoreDoc.doc)
    filename = doc.get("filename")
    print filename
    found_paraghaph = fetch_from_my_text_library(filename)

    stream = lucene.TokenSources.getTokenStream("contents", found_paraghaph, analyzer);
    scorer = lucene.Scorer(query, "contents", lucene.CachingTokenFilter(stream))
    highligter = lucene.Highligter(scorer)
    fragment = highligter.getBestFragment(analyzer, "contents", found_paraghaph)
    print '>>>' + fragment

しかし、それはすべてエラーで終わります:

Traceback (most recent call last):
  File "./search.py", line 76, in <module>
    scorer = lucene.Scorer(query, "contents", lucene.CachingTokenFilter(stream))
NotImplementedError: ('instantiating java class', <type 'Scorer'>)

したがって、Luceneのこの部分はpyLuceneではまだ実装されていないと思います。それを行う他の方法はありますか?

4

1 に答える 1

4

私も同様のエラーが発生しました。このクラスのラッパーは、Pylucenev3.6にはまだ実装されていないと思います。

次のことを試してみてください。

analyzer = StandardAnalyzer(Version.LUCENE_CURRENT)

# Constructs a query parser.
queryParser = QueryParser(Version.LUCENE_CURRENT, FIELD_CONTENTS, analyzer)

# Create a query
query = queryParser.parse(QUERY_STRING)

topDocs = searcher.search(query, 50)

# Get top hits
scoreDocs = topDocs.scoreDocs
print "%s total matching documents." % len(scoreDocs)

HighlightFormatter = SimpleHTMLFormatter();
highlighter = Highlighter(HighlightFormatter, QueryScorer (query))

for scoreDoc in scoreDocs:
    doc = searcher.doc(scoreDoc.doc)
    text = doc.get(FIELD_CONTENTS)
    ts = analyzer.tokenStream(FIELD_CONTENTS, StringReader(text))
    print doc.get(FIELD_PATH)
    print highlighter.getBestFragments(ts, text, 3, "...")
    print ""

検索結果のアイテムごとにトークンストリームを作成することに注意してください。

于 2012-09-23T09:53:09.340 に答える