首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Lucene查询需要注意,有时候,有些字段可以查询到,但是有些不能。怎么解决?

Lucene查询需要注意,有时候,有些字段可以查询到,但是有些不能。怎么解决?

作者头像
凯哥Java
发布2022-12-16 17:55:05
发布2022-12-16 17:55:05
8980
举报
文章被收录于专栏:凯哥Java凯哥Java

问题描述:

根据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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.3.query查询语句对象
    •   1.3.1.使用QueryParser查询
    •   1.3.2.使用query的子类查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档