java - 使用 Hibernate Search 和 Lucene 实现类似 Google 的搜索

标签 java hibernate lucene hibernate-search

我正在使用 Hibernate Search 和 Lucene 对文档数据库的内容字段进行全文搜索。我有一个正在接受用户查询的搜索文本框。我已将搜索固定为基于短语匹配的搜索。我想使用组合搜索。为了解释我的观点,假设用户想要搜索“美国”。如果我使用基于短语的搜索,它将给出查询中的每个出现情况,并忽略单独出现的“United”和“States”。如果我进行字段匹配搜索,它将获取包含单个查询词的所有结果。我的问题是,是否有任何直接的方法,以便如果用户搜索带有引号或任何其他标记的短语, hibernate 搜索将应用基于短语的搜索。否则它会检索基于单词的结果。如果用户输入两个以任意布​​尔字符分隔的查询词,则应用 boolean 搜索等。例如:

Example Query     | Description
United States     | Search for all occurrences of two words: United and States
"United States"   | Search for phrase "United States"  
United NOT States | Apply Boolean not query on United and States

等等

我想实现像google这样的东西,我知道google太强大了但至少可以做到一点点。我只是想知道 Hibernate Search 和 lucene 中是否有针对此类事情的内置功能,或者我需要为用户提供一些运算符,手动解析用户查询,实现一些逻辑来找出运算符和其他符号,然后应用根据找到的符号进行查询。请帮忙

最佳答案

Hibernate Search 中没有直接类似的东西,但 Lucene 有一个查询解析器。对于它的语法,请查看 - http://lucene.apache.org/core/4_10_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description .

如果您对其功能和语法感到满意,您可以将用户输入传递给 Lucene 查询解析器。如果没有,您将需要编写自己的语法和语法解析器,它将查询转换为适当的 Hibernate Search/Lucene 查询。

关于java - 使用 Hibernate Search 和 Lucene 实现类似 Google 的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743475/

相关文章:

java - 将 Hibernate 集成到 Spring 3 项目中

java - JPQL CASE 语句中的 WHERE 子句问题

java - 将多个 SOLR 字段合并为一个

lucene - Jackrabbit 针对 UUID 运行查询

java - 如何获取 Lucene 模糊搜索结果的匹配项?

java - Play Framework CompilationException

java - 如何以编程方式在android中将水平 ScrollView 移动一半?

java - 错误 : Logcat capture failed: spawn ENOENT

mysql - Hibernate native sql表未找到错误

java - 了解 hibernate : JDBCExceptionReporter | Invalid parameter index