Lucene查询需要注意,有时候,有些字段可以查询到,但是有些不能。怎么解决?
问题描述:
根据sortNo、chapterId、bookId、text都可以查询到。但是根据bookName和chapterName就查不到了 类型都是stringField,这个是为什么?
来看看向Lucene写数据的对象:
问题原因:
1.3.query查询语句对象
对要搜索的信息创建Query查询对象,Lucene会根据Query查询对象生成最终的查询语法,类似关系数据库Sql语法一样Lucene也有自己的查询语法,比如:“name:lucene”表示查询Field的name为“lucene”的文档信息。
1.3.1.使用QueryParser查询
通过QueryParser也可以创建Query,QueryParser提供一个Parse方法,此方法可以直接根据查询语法来查询。Query对象执行的查询语法可通过System.out.println(query);查询。需要使用到分析器。创建索引时使用的分析器和查询索引时使用的分析器要一致。
1.3.2.使用query的子类查询
TermQuery:
根据词进行搜索(只能从文本中进行搜索)
QueryParser:
根据域名进行搜索,可以设置默认搜索域,推荐使用. (只能从文本中进行搜索)
NumericRangeQuery:
从数值范围进行搜索
BooleanQuery:
组合查询,可以设置组合条件,not and or.从多个域中进行查询
must相当于and关键字,是并且的意思
should,相当于or关键字或者的意思
must_not相当于not关键字, 非的意思
注意:单独使用must_not 或者 独自使用must_not没有任何意义
MatchAllDocsQuery:
查询出所有文档
MultiFieldQueryParser:
可以从多个域中进行查询,只有这些域中有关键词的存在就查询出来
解决:
将要查询的字段修改成Text,就可以。
补充:
参考:https://www.cnblogs.com/fengcha0/p/9989101.html
相关文章
- EasyCVR云端录像模块无法进行下载是什么原因?该如何解决该问题?
- 什么是网站死链?如何查询网站死链?网站死链怎么解决?[通俗易懂]
- 我在实施蓝绿部署后遇到的问题和解决方法
- windows系统蓝牙功能突然消失怎么解决?
- 解决Oracle 实例查询问题的方法(查询oracle实例)
- MySQL查询中的挫折:如何解决错误(mysql查询错误)
- MySQL 多库联合查询:解决难题的利器(mysql多库查询)
- 时间设置解决Java中Redis设置过期时间的问题(redisjava过期)
- 解决MySQL错误1062:“重复键”(mysql错误1062)
- MySQL建立外键约束:解决数据完整性问题(mysql建外键约束)
- 解决Oracle查询结果乱码问题(oracle 查询乱码)
- 使用MSSQL联合查询语句解决数据库问题(mssql 联合查询语句)
- MSSQL查询优化:解决慢查询问题(mssql查询缓慢)
- 掌握MySQL 1对多查询解决复杂数据结构问题(1对多mysql查询)
- Oracle使用交并表查询解决复杂数据问题(oracle交并表查询)
- MySQL数据库无法导出数据,如何解决(mysql 不能导出)
- Redis调度多路精准分配解决精细问题(redis选择不同队列)
- 快速解决jQuery与其他库冲突的方法介绍
- sql2000无法执行查询,因为一些文件缺少或未注册"的解决方法
- 解决video标签在安卓webview下无法自动播放问题
- ThinkPHP采用GET方式获取中文参数查询无结果的解决方法