Lucene4.4 IntField怎么才能搜索到?

发布于 2021-11-30 13:04:15 字数 2829 浏览 819 评论 1

package test;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.FloatField;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;

public class Lucene44TC {

	@Test
	public void test() throws IOException, ParseException {

		File file = new File("c://index_");
		if (file.exists()) {
			File[] f = file.listFiles();

			for (int i = 0; i < f.length; i++) {
				f[i].delete();
			}
		} else {
			file.mkdirs();

		}
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);
		Directory

		indexDir = new SimpleFSDirectory(file);

		IndexWriter writer = new IndexWriter(indexDir, new IndexWriterConfig(
				Version.LUCENE_44, analyzer));

		for (int i = 0; i < 100; i++) {

			Document doc = new Document();
			doc.add(new IntField("ids", 10000000 + i, Field.Store.YES));
			doc.add(new StringField("id", "10000000" + i, Field.Store.YES));
			doc.add(new StringField("test1", "美好的明天" , Field.Store.YES));
			doc.add(new TextField("title", "GOAT BLOOD in Sodium Citrate" + i,
					Field.Store.NO));

			doc.add(new FloatField("score", 59.9F, Field.Store.YES));

			writer.addDocument(doc);

		}

		writer.forceMerge(1, true);
		writer.close();

		// ////////////////////////////

		IndexSearcher searcher = null;
		searcher = new IndexSearcher(DirectoryReader.open(indexDir));
		// (1第一种不行)
		Query q = new QueryParser(Version.LUCENE_44, "ids", analyzer)
				.parse("10000001");  //no
		// (2第二种也不行)
		//  q = new TermQuery(new Term("ids", "10000001"));  no
		//  q = new TermQuery(new Term("test1", "美好的明天")); ok

		System.out.println(q);
		TopDocs hits = searcher.search(q, 10);
		System.out.println(hits.totalHits);
		for (int i = 0; i < hits.scoreDocs.length; i++) {
			int docId = hits.scoreDocs[i].doc;
			Document hit = searcher.doc(docId);
			System.out.println(hit.toString());
		}

	}
}

以上是代码,我怎么才能搜索到Intfield这个字段

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女情怀诗 2021-11-30 14:06:58

搜索的时候可以用NumericRangeQuery.

例如:

q = NumericRangeQuery.newIntRange("ids", 10000001, 10000001, true, true);

这样就能搜索到结果了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文