使用Hibernate Search和Lucene实现Google搜索

时间:2014-09-09 11:28:40

标签: java hibernate lucene hibernate-search

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

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

我想实现像谷歌这样的东西,我知道谷歌功能太强,但至少可以做一点点。我只是想知道Hibernate Search和lucene中是否有任何内置功能用于此类事情,或者我需要为用户提供一些操作符,手动解析用户查询,实现一些逻辑以找出运算符和其他符号然后应用基于找到的符号查询。请帮助

1 个答案:

答案 0 :(得分:0)

在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查询。