天津市城乡建设网站,网站建设翻译,厦门网站建设,抖音代运营机构常州原链接#xff1a;https://www.xttblog.com/?p3532
所有的搜索基本上都存在精确匹配#xff0c;包含等操作。Lucene 中同样存在这样的操作#xff0c;今天我们以 IntPoint 为例#xff0c;来说说 Lucene 中的精确查询。
IntPoint、LongPoint、FloatPoint、DoublePoint 这…原链接https://www.xttblog.com/?p3532
所有的搜索基本上都存在精确匹配包含等操作。Lucene 中同样存在这样的操作今天我们以 IntPoint 为例来说说 Lucene 中的精确查询。
IntPoint、LongPoint、FloatPoint、DoublePoint 这个 4 个的操作类似我就只以 IntPoint 来进行举例。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 Test public void testIntPointQuery() throws IOException { Directory directory new RAMDirectory(); IndexWriter indexWriter new IndexWriter(directory, new IndexWriterConfig(new StandardAnalyzer())); // 创建 Document Document document new Document(); // 创建 Field 字段/域 Field intPoint new IntPoint(age, 11); document.add(intPoint); intPoint new StoredField(age, 11); document.add(intPoint); indexWriter.addDocument(document); Field intPoint1 new IntPoint(age, 22); document new Document(); document.add(intPoint1); intPoint1 new StoredField(age, 22); document.add(intPoint1); indexWriter.addDocument(document); indexWriter.close(); IndexSearcher indexSearcher new IndexSearcher(DirectoryReader.open(directory)); //精确查询 Query query IntPoint.newExactQuery(age, 11); ScoreDoc[] scoreDocs indexSearcher.search(query, 10).scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { System.out.println(精确查询 indexSearcher.doc(scoreDoc.doc)); } //范围查询不包含边界 query IntPoint.newRangeQuery(age, Math.addExact(11, 1), Math.addExact(22, -1)); scoreDocs indexSearcher.search(query, 10).scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { System.out.println(不包含边界 indexSearcher.doc(scoreDoc.doc)); } //范围查询包含边界 query IntPoint.newRangeQuery(age, 11, 22); scoreDocs indexSearcher.search(query, 10).scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { System.out.println(包含边界 indexSearcher.doc(scoreDoc.doc)); } //范围查询左包含右不包含 query IntPoint.newRangeQuery(age, 11, Math.addExact(22, -1)); scoreDocs indexSearcher.search(query, 10).scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { System.out.println(左包含右不包含 indexSearcher.doc(scoreDoc.doc)); } //集合查询 query IntPoint.newSetQuery(age, 11, 22, 33); scoreDocs indexSearcher.search(query, 10).scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { System.out.println(集合查询 indexSearcher.doc(scoreDoc.doc)); } }
IntPoint.newExactQuery 精确查询使用的是 PointRangeQuery。 IntPoint.newRangeQuery 范围查询使用的是 PointRangeQuery。 IntPoint.newSetQuery 集合查询使用的是 PointInSetQuery。
它们都继承自 Query通过 IntPoint 去创建这些抽象类的匿名实现类。
LongPoint、FloatPoint、DoublePoint 封装的和 IntPoint 都很相似我就不在列举了。大家主要记住 newExactQuerynewRangeQuerynewSetQuery 三个方法的用法即可。