是否可以通过匹配术语来订购lucene文件?

时间:2015-04-16 13:13:06

标签: lucene

我正在使用Lucene 4.10.3和Java 1.7

我想知道是否可以订购查询结果匹配的字词? 简而言之,如果我的文件符合文本字段;

查询

  

文字:a *

我希望文档包含 ab ,然后 ac ,然后广告等。

真实情况更复杂但是,我实际上要完成的是将关系数据库“填充”到我的lucene索引中(可能不是最好的主意?)。

一个恰当的例子是: 我有代表图书馆书籍的文件。每本书都有一个标题,还有一本借阅本书和借阅日期的人员名单。

当用户搜索标题包含“JAVA”的图书时,我想优先考虑该用户借阅的图书。这可以通过添加TextField“借用者”,在其上添加SHOULD子句并按分数排序来实现。 此外,如果此用户之前借过了几本带有“JAVA”的书籍,我想首先展示最近借来的书籍。所以我想创建一个看起来像的TextField“借用者” 借款人:“user1__20150505 user2__20150506”等。

我将添加一个BooleanClause借用者:user1 *并按匹配术语排序。 欢迎任何其他解决方案的想法

1 个答案:

答案 0 :(得分:0)

我知道你真正的问题更复杂,但也许这对你有帮助。

您可以首先在索引中搜索与您的查询匹配的标记,然后针对每个匹配标记专门使用此标记执行查询。

请参阅https://lucene.apache.org/core/6_0_1/core/org/apache/lucene/index/TermsEnum.html。只需寻找前缀并迭代,直到前缀停止匹配。

通常,有时很容易发出两个查询。例如,在用户之前借用的书籍语料库中的一个,以及另一个用于整个语料库的用户。

这些方法可能不起作用,但在这种情况下,您可以实现自定义Scorer以某种方式将排序映射到数字。

请参阅http://opensourceconnections.com/blog/2014/03/12/using-customscorequery-for-custom-solrlucene-scoring/