【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用

原链接:https://www.xttblog.com/?p=3532

所有的搜索基本上都存在精确匹配,包含等操作。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(111), 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"1122);

    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"112233);

    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 都很相似,我就不在列举了。大家主要记住 newExactQuery,newRangeQuery,newSetQuery 三个方法的用法即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【待解答】文件目录可以利用foreach边遍历边删除操作,为什么?

Testpublic void demoTestDitDel() {File file new File(util.Directory.GetAppPath("test"));File[] fs file.listFiles();for (File f : fs) {f.delete();System.out.println("del");}} 有时间再解答:

lucene分布式索引

当数据量较大访问量较大的时候,分布式就不可避免,我现在知道的处理方式有下面几种: 1,用一个好服务器作为索引服务器,磁盘冗余的方式保证搜索的正常进行; 2,索引服务器用一台,检索…

【转载保存】lucene3.0可以对docId、docField、queryParser设置Boost值来影响排序结果

转自:http://catastiger.iteye.com/blog/803796 前提:不对结果做sort操作. 在搜索中,并不是所有的Document和Fields都是平等的.有些技术会要求到对其Doucment或者Fields的权值改变,默认值为:1.0F,以上需求都是通过改变Document的boost因子来改变的. 下面是通过…

lucene6.0 查询语句设置关键字boost值

代码模板: public class Demo {public static void main(String[] args) throws IOException, Exception {//建立索引String indexDirPath util.Directory.GetAppPath("indexDir");Path path Paths.get(indexDirPath);StandardAnalyzer analyzer new …

【转载保存】Lucene7.1.0超详细的使用文档

转载地址:https://www.cnblogs.com/houzheng/p/9150314.html

【转载保存】lucene优秀文章整理

Lucene解析 - 基本概念: https://www.jianshu.com/p/fbb171e73721?fromtimeline&isappinstalled0 Lucene DocValues——没有看懂: https://www.cnblogs.com/bonelee/p/6669263.html Lucene DocValues详解: https://blog.csdn.net/zteny/article/details/60633374 So…

lucene中write.lock索引锁机制的原理

write.lock加锁的实现原理: 实现源码(lucene 6.0): Override protected Lock obtainFSLock(FSDirectory dir, String lockName) throws IOException {Path lockDir dir.getDirectory();// Ensure that lockDir exists and is a…

正则表达式大全

[正则表达式]文本框输入内容控制 整数或者小数:^[0-9]\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$"。 只能输入n位的数字:"^\d{n}$"。 只能输入至少n位的数字:"^\d{n,}$"。 只能输入m~n位的数字&am…

天气数据获取接口和网址汇总

免费API:https://www.sojson.com/blog/305.html 爬取网址:http://www.weather.com.cn/ https://www.tianqi.com/chinacity.html

鸡汤

史蒂芬柯维的7个习惯就是自己的原则和价值观: 积极主动以终为始要事第一双赢思维知彼解己综合综效不断更新 稻盛和的原则和价值观比如六项精进: 付出不亚于任何人的努力要谦虚,不要骄傲要每天反省或者就要感谢积善行,思利他不要…

【转载保存】索引文件锁LockFactory

索引文件锁LockFactory LockFactory在Lucene中用来对索引文件所在的目录进行加锁,使得同一时间总是只有一个IndexWriter对象可以更改索引文件,即保证单进程内(single in-process)多个不同IndexWriter对象互斥更改(多线程持有相同引用的IndexW…

lucene大牛博客汇总保存

https://www.amazingkoala.com.cn/Lucene/Index/http://codepub.cn/tags/Lucene/

no segments* file found in SimpleFSDirectory问题总结

lucene6.0版本 场景一:第一次启动程序索引库为空抛出异常 最近在写lucene发现利用lucene6.0版本时候如果索引库为空构建indexWriter,代码如下: IndexWrterConfig config new IndexWriterConfig(analyzer); IndexWriter indexWriter new …

lucene Term查询

查询demo Path path Paths.get(util.Directory.GetAppPath("indexDir"));IndexReader reader DirectoryReader.open(FSDirectory.open(path));//获取IndexSearcher对象IndexSearcher indexSearcher new IndexSearcher(reader);Query query new TermQuery(new Ter…

IndexOptions类说明

IndexOptions是在lucene-core-x.jar包下面,其作用是在新建索引时候选择索引属性。 IndexOptions是一个枚举类: 枚举变量说明: NONE不被索引DOCS_AND_FREQS文档和词频建立索引DOCS_AND_FREQS仅对文档和词频建立索引DOCS_AND_FREQS_AND_POSIT…

【转载保存】lucene正则查询使用注意

今天要分享的是关于lucene中另外一种丰富的查询方式----正则查询,lucene内置了许多的查询API,以及更强大的自定义查询方式的QueryParse,大部分情况下我们使用内置的查询API,基本上就可以满足我们的需求了,但是如果你想…

lucene 各个版本介绍

官方说明文档:https://lucene.apache.org/core/8_3_0/changes/Changes.html#v8.3.0.other 开源中国翻译:https://www.oschina.net/p/lucene

【转载保存】搜索引擎调研文档

搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。 Elasticsearch是一个建立在全…

webmagic抓取实例

git地址:https://github.com/code4craft/webmagic/tree/master/webmagic-samples/src/main/java/us/codecraft/webmagic/samples