gpt4 book ai didi

java - 使用 PhraseQuery 或 WildcardQuery 无法从有效索引中找到任何结果?

转载 作者:行者123 更新时间:2023-12-01 15:51:23 24 4
gpt4 key购买 nike

出于某种原因,我无法从 3552 个项目的有效索引中找到任何结果。

请参阅下面的代码,然后是我运行程序时的控制台输出。 3552 是索引文档的数量。 /c:/test/stuff.txt 是从文档 5 中检索作为测试的正确索引路径。底部的所有文本都是测试文件的全文(XML 类型输出)。我的简单查询没有产生结果,我错过了什么?

也许我的 WildcardQuery 语法不好?我认为这效率低下(由于开头和结尾的通配符),但它至少会从索引返回此文档...

import java.io.File;
import java.io.IOException;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Fieldable;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.FSDirectory;


public class Searcher
{

/**
* @param args
* @throws IOException
* @throws CorruptIndexException
*/
public static void main(String[] args) throws CorruptIndexException, IOException
{

System.out.println("Begin searching test...");

IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(args[0])));

// termContainsWildcard is shown to be true here when debugging
// numberOfTerms is 0
WildcardQuery query = new WildcardQuery(new Term("contents", "*stuff*"));

System.out.println("Query field is: " + query.getTerm().field());
System.out.println("Query field contents is: " + query.getTerm().text());

TopDocs results = searcher.search(query, 5000);

// no results returned :(
System.out.println("Total results from index " + args[0] + ": " + results.totalHits);

for (ScoreDoc sd : results.scoreDocs)
{
System.out.println("Document matched. Number: " + sd.doc);
}

System.out.println();

System.out.println("Begin reading test...");

// now read from the index to see if I am crazy
IndexReader reader = IndexReader.open(FSDirectory.open(new File(args[0])));

// correctly shows the number of documents in the local index
System.out.println("Number of indexed documents: " + reader.numDocs());

// pick out a random, small document and check its fields
Document d = reader.document(5);

for (Fieldable f : d.getFields())
{
System.out.println("Field name is: " + f.name());
System.out.println(new String(f.getBinaryValue()));
}
}
}

运行时控制台输出

开始搜索测试...
查询字段为:内容
查询字段内容为:*stuff*
索引 C:\INDEX2: 0 的总结果

开始阅读测试...
索引文档数量:3552
字段名称为:路径
/c:/test/stuff.txt
字段名称为:内容
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="Content-Length" content="8"/>
<meta name="Content-Encoding" content="UTF-8"/>
<meta name="Content-Type" content="text/plain"/>
<meta name="resourceName" content="stuff.txt"/>
<title/>
</head>
<body>
<p>stuff &#13;
</p>
</body>
</html>

最佳答案

您可以尝试使用 Luke 来运行您的查询并测试一些不同的查询。您还可以使用 Luke 浏览索引术语,这可能会为您提供有关正在发生的情况的线索。您用于索引文档的代码也可能会给出一些提示:例如,您的字段是否已建立索引?您将从内容中获取二进制值,这可能意味着它从未被标记化并因此被索引。

关于java - 使用 PhraseQuery 或 WildcardQuery 无法从有效索引中找到任何结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5954409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com