搜索引擎学习(七)解析查询
QueryParser【解析查询】
定义:QueryParser的解析查询是用Lucene语法进行查询,而上一篇说到的子类查则是使用java对象来进行查询条件的封装。
使用方式:使用QueryParser也可以创建Query,QueryParser提供了一个parse方法,此方法可以直接根据查询语法来查询。
代码展示:
/** * 条件解析对象查询 * PS:lucene里面不支持对于字符串类型的范围查询,但是solr支持~ * * 各种条件语句解析: * fileName:java【精准查询】 * fileSize:{1 TO 200}【范围查询】 * +fileName:java fileName:lunece【组合查询】 * PS:组合查询不同的条件空格隔开,其中域前面的“+”号代表“条件必须满足”,“-”号代表“条件必须不满足”,没有符号代表“条件可选”, * PS:也可以用 AND、OR、NOT来表示上面的符号(详细解析见总结的图) * @throws Exception */ @Test public void testQueryParser() throws Exception { //获取IndexSearcher(索引搜索)对象 IndexSearcher indexSearcher = getIndexSearcher(); //参数1:默认查询的域 //参数2:采用的分析器 QueryParser queryParser = new QueryParser("fileName", new StandardAnalyzer()); //构建lucene查询条件的语法(第一个*是域,第二个*是域值) Query query = queryParser.parse("fileName:java");//*:* 域名:域值 //打印查询的语法 System.out.println(query); //执行查询并打印结果 printResult(query, indexSearcher); }
MultiFieldQueryParser【指定多个默认搜索域的解析查询】
定义:在QueryParser的解析查询基础上扩展,支持多个默认域的查询。
代码展示:
/** * 多默认域解析查询 * @throws Exception */ @Test public void testMultiFieldQueryParser() throws Exception { //获取IndexSearcher(索引搜索)对象 IndexSearcher indexSearcher = getIndexSearcher(); //参数1:设置多个默认查询的域 //参数2:采用的分析器 String[] fieldNames = {"fileName", "fileContent"};//指定默认查询的多个域 MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fieldNames, new StandardAnalyzer()); //构建lucene查询条件的语法(第一个*是域,第二个*是域值) Query query = queryParser.parse("java");//*:* 域名:域值 //打印查询的语法 System.out.println(query); //执行查询并打印结果 printResult(query, indexSearcher); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律