代码之家  ›  专栏  ›  技术社区  ›  hayfreed

Lucene API查询始终返回第一个字典结果

  •  0
  • hayfreed  · 技术社区  · 7 年前

    我正在学习如何使用Lucene Java API,并建立了一个用于概念验证的小示例。每当我发送查询时,它都会给我一个结果:字典中的第一项,无论查询是什么。

    我的字典里有89834个术语,这里是前5个。

    Field name: "drug"
    "cysteine"
    "glycine"
    "dihydroxyacetone"
    "glycerone"
    "arginine"
    ...
    

    搜索“精氨酸”会返回以下结果:

    Found 1 results
    "cysteine"
    

    我输入的任何东西都会返回半胱氨酸,这是唯一的结果。

    这是代码。

    def luceneTest(cxn: RepositoryConnection)
    {
        //build the index
        val analyzer: Analyzer = new StandardAnalyzer()
        val indexPath: Path = Paths.get("lucene/model1")
        val directory: Directory = FSDirectory.open(indexPath)
        val config: IndexWriterConfig = new IndexWriterConfig(analyzer)
        val iwriter: IndexWriter = new IndexWriter(directory, config)
        val doc = addCSVtoLuceneIndex("lucene_dictionary.csv")
        iwriter.addDocument(doc)
        iwriter.close()
    
        //query the index
        val ireader: DirectoryReader = DirectoryReader.open(directory)
        val isearcher: IndexSearcher = new IndexSearcher(ireader)
        val parser: QueryParser = new QueryParser("drug", analyzer)
        val query: Query = parser.parse("arginine")
        val hits: Array[ScoreDoc] = isearcher.search(query, 10).scoreDocs
        logger.info("found " + hits.size + " results.")
        for (a <- hits)
        {
            val hitdoc: Document = isearcher.doc(a.doc)
            logger.info(hitdoc.get("drug"))
        }
        ireader.close()
        directory.close()
    }
    
    def addCSVtoLuceneIndex(dictionary: String): Document =
        {
            val doc: Document = new Document()
            val br: BufferedReader = new BufferedReader(new FileReader(dictionary))
            var index = 1
            for (b <- 1 to 83984)
            {
                var line = br.readLine()
                var strArray: Array[String] = line.split(",")
                var strToAdd = ""
                for (a <- 1 to strArray.length - 1) strToAdd += strArray(a)
                doc.add(new Field("drug", strToAdd, TextField.TYPE_STORED))
                //logger.info("added " + strToAdd)
            }
            doc
        }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Evgeny    7 年前

    在中迭代文件 addCSVtoLuceneIndex 但把一切都放在一个lucene文档中。假设您希望每行有一个文档。

    您确定要将文件中的每一行按原样放置,而不使用逗号吗?