Lucene的搜索类型有哪些
这篇文章主要介绍“Lucene的搜索类型有哪些”,在日常操作中,相信很多人在Lucene的搜索类型有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Lucene的搜索类型有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
“ Lucene对于查询的方式较多,可以实现TermQuery、BooleanQuery、PhraseQuery、 TermRangeQuery等一系列的基于不同类型的词组的检索。在进行查询的时候可以选择合适的查询方式对文档进行查询。例如数值类型可以采用TermRangeQuery进行查询。”
查询方式大览
TermQuery(词条搜索) 词条搜索,根据单个单词进行查找的方式进行检索,Term表示的是一个个的单词,而在中文环境下则表示的是一个个的词语(分词后的词语)。例如查询标题中包含PHP的文档。
Query query = new TermQuery(new Term("title","PHP"))
BooleanQuery(组合搜索) BooleanQuery是合并多个查询条件的Query,例如合并TermQuery实现查询 标题中包含PHP并且content中同样包含PHP的文档。
BooleanQuery query = new BoolQuery();
query.add(new TermQuery(new Term("title","PHP")));
query.add(new TermQuery(new Term("content","PHP")));PhraseQuery(短语搜索) 短语查询提供的是类似于多个关键词的查询,Term输入的只有一个词,而PhraseQuery查询的是一组词。例如查询 PHP是世界上最好的语言 就会给予出相关的文档。PhraseQuery同样有一个比较特殊的地方,就是slop,slop是指两个项之间允许的最大间隔。例如我们输入的查询条件为 世界,语言,可能中间缺少了 上、最好、的 就无法进行检索。那么如果我们想要检索到结果就需要设置slop。
PhraseQuery query = new PhraseQuery();
query.add(new Term("title","世界"));
query.add(new Term("title","语言"));
query.setslop(x); //允许的跨度或说间隔PrefixQuery(前缀查询) 前缀查询,类似于我们常写的SQL LIKE "PHP%"进行匹配查询,简单来说就是实现通过前缀的词进行查询
PrefixQuery query = new PhrefixQuery(new Term("title","PHP"));
FuzzyQuery(模糊查询) 模糊查询,它实现的是一种基于编辑距离相似度的检索。编辑距离算法的大概意思就是一个词组转换到另一个词组的最小距离。
FuzzyQuery query = new FuzzyQUery("title","PHP");
RegexpQuery(正则表达式查询) 相信正则表达式大家都了解,Lucene实现正则表达式检索是基于词组的正则表达式检索方式
RegexQuery query = new RegexQuery(new Term("title",".*PHP.*"));
TermRangeQuery() TermRangeQuery实现的是字符串的范围查询,那么既然是范围同时有在字符串中进行范围检索的其实是检索的ASCII码值。但是其实中文场景中比较ASCII码的场景不是很多。(我只用过正则匹配),可以大概的熟悉一下,构造函数为 TermRangeQuery(String field, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper)
TermRangeQuery query = new TermRangeQuery("title","PHP","语言",true,false);
到此,关于“Lucene的搜索类型有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注蜗牛博客网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
评论