По какой-то причине я не могу найти никаких результатов из моего действительного индекса из 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()));
}
}
}
ВЫВОД КОНСОЛИ ПРИ РАБОТЕ1013 *
Начать тест поиска ...
Поле запроса: содержание
Содержание поля запроса: *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
</p>
</body>
</html>