Lucene的一些基础知识[转载]
Lucene提供了方便您创建自建查询的API,也通过QueryParser提供了强大的查询语言。 本文讲述Lucene的查询语句解析器支持的语法,Lucene的查询语句解析器是使用JavaCC工具生成的词法解析器,它将查询字串解析为Lucene Query对象。 |
|
项(Term) |
一条搜索语句被拆分为一些项(term)和操作符(operator)。项有两种类型:单独项和短语。 单独项就是一个单独的单词,例如"test" , "hello"。 短语是一组被双引号包围的单词,例如"hello dolly"。 多个项可以用布尔操作符连接起来形成复杂的查询语句(接下来您就会看到)。 注意:Analyzer建立索引时使用的解析器和解析单独项和短语时的解析器相同,因此选择一个不会受查询语句干扰的Analyzer非常重要。 |
|
域(Field) |
Lucene支持域。您可以指定在某一个域中搜索,或者就使用默认域。域名及默认域是具体索引器实现决定的。 您可以这样搜索域:域名+":"+搜索的项名。 举个例子,假设某一个Lucene索引包含两个域,title和text,text是默认域。如果您想查找标题为"The Right Way"且含有"don't go this way"的文章,您可以输入: title:"The Right Way" AND text:go 或者 title:"Do it right" AND right 因为text是默认域,所以这个域名可以不行。 注意:域名只对紧接于其后的项生效,所以 title:Do it right 只有"Do"属于title域。"it"和"right"仍将在默认域中搜索(这里是text域)。 |
|
项修饰符(Term Modifiers) | ||||||||||||
Lucene支持项修饰符以支持更宽范围的搜索选项。
| ||||||||||||
|
布尔操作符可将项通过逻辑操作连接起来。Lucene支持AND, "+", OR, NOT 和 "-"这些操作符。(注意:布尔操作符必须全部大写)
| |||||||||||||||
|
分组(Grouping) |
Lucene支持使用圆括号来组合字句形成子查询。这对于想控制查询布尔逻辑的人十分有用。 搜索含有"jakarta"或者"apache",同时含有"website"的文档,使用查询: (jakarta OR apache) AND website 这样就消除了歧义,保证website必须存在,jakarta和apache中之一也存在。 |
|
转义特殊字符(Escaping Special Characters) |
Lucene支持转义特殊字符,因为特殊字符是查询语法用到的。现在,特殊字符包括 + - && || ! ( ) { } [ ] ^ " ~ * ? : \ 转义特殊字符只需在字符前加上符号\,例如搜索(1+1):2,使用查询 \(1\+1\)\:2 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?