【问题标题】:KeywordAnalyser for lucene python?用于 lucene python 的关键字分析器?
【发布时间】:2015-09-17 06:20:08
【问题描述】:

我想通过 python 来使用 lucene。 我将 StandardAnalyser 用于索引和搜索。它工作正常,但现在,我的要求发生了变化,我需要使用 KeywordAnalyser

StandardAnalyser 的代码:

#Importing packages
import lucene
lucene.initVM()
from org.apache.lucene import analysis, document, index, queryparser, search, store, util

#Initialize Parameters
analyzer = analysis.standard.StandardAnalyzer(util.Version.LUCENE_CURRENT)
config = index.IndexWriterConfig(util.Version.LUCENE_CURRENT, self.analyzer)
directory = store.FSDirectory.open(File(<path_where_to_index>))
iwriter = None
iwriter = index.IndexWriter(directory, config)

#Indexing Part
doc = document.Document()
doc.add(document.Field("fieldname", entity, document.Field.Store.YES, document.Field.Index.ANALYZED))
doc.add(document.Field("category", category, document.Field.Store.YES, document.Field.Index.ANALYZED))
iwriter.addDocument(doc)
iwriter.commit()

#Searching Part
ireader = index.IndexReader.open(directory)
isearcher = search.IndexSearcher(ireader)
parser = queryparser.classic.QueryParser(util.Version.LUCENE_CURRENT, "fieldname", self.analyzer)
query = parser.parse(entity)
hits = isearcher.search(query, None, 100).scoreDocs
print hits
for hit in hits:
      hitDoc = isearcher.doc(hit.doc)
      print hitDoc

以上代码使用StandardAnalyser。我想使用 KeywordAnalyser 而不是 StandardAnalyser

我在下面的代码中更改了分析器。 Below Code 正在使用 KeywordAnalyser,但没有执行搜索。

关键字分析器代码:

#Importing packages
import lucene
lucene.initVM()
from org.apache.lucene import analysis, document, index, queryparser, search, store, util

#Initialize Parameters
analyzer = analysis.core.KeywordAnalyser(util.Version.LUCENE_CURRENT)
config = index.IndexWriterConfig(util.Version.LUCENE_CURRENT, self.analyzer)
directory = store.FSDirectory.open(File(<path_where_to_index>))
iwriter = None
iwriter = index.IndexWriter(directory, config)

#Indexing Part
doc = document.Document()
doc.add(document.Field("fieldname", entity, document.Field.Store.YES, document.Field.Index.ANALYZED))
doc.add(document.Field("category", category, document.Field.Store.YES, document.Field.Index.ANALYZED))
iwriter.addDocument(doc)
iwriter.commit()

#Searching Part
ireader = index.IndexReader.open(directory)
isearcher = search.IndexSearcher(ireader)
parser = queryparser.classic.QueryParser(util.Version.LUCENE_CURRENT, "fieldname", self.analyzer)
query = parser.parse(entity)
hits = isearcher.search(query, None, 100).scoreDocs
print hits
for hit in hits:
      hitDoc = isearcher.doc(hit.doc)
      print hitDoc

有什么帮助吗?

【问题讨论】:

  • 好的...所以使用它。它位于analysis.core。你有什么特别的问题吗?
  • @femtoRgon:谢谢。我知道 KeywordAnalyser,我需要使用 analysis.core。索引工作正常,但搜索工作。对于搜索,我使用了queryparser。我认为queryparser 是问题所在,但它仍然没有抛出任何错误,但搜索不起作用。

标签: python lucene


【解决方案1】:

我找到了我的问题的解决方案。

要使用KeywordAnalyser,我需要analysis.core。我不能使用queryparser 进行搜索,因为它主要适用于StandardAnalyser。要在 KeywordAnalyser 上进行搜索,我需要使用 index.Termsearch.TermQuery

搜索代码:

term_parser = index.Term("fieldname", entity)
query = search.TermQuery(term_parser)
hits = isearcher.search(query, None, 10).scoreDocs

【讨论】:

    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2011-07-25
    • 2013-04-25
    相关资源
    最近更新 更多