【问题标题】:Is it possible to order lucene documents by matching term?是否可以通过匹配术语来订购 lucene 文档?
【发布时间】:2015-04-16 13:13:05
【问题描述】:

我将 Lucene 4.10.3 与 Java 1.7 一起使用

我想知道是否可以对查询结果匹配项进行排序? 简单地说,如果我的文档包含一个文本字段;

查询是

文本:a*

我想要包含 abacad 等的文档。

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

一个合适的例子是: 我有代表图书馆书籍的文件。每本书都有一个书名,还有一个借过这本书的人的名单和借阅的日期。

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

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

【问题讨论】:

    标签: lucene


    【解决方案1】:

    我了解您的实际问题更复杂,但无论如何这也许会有帮助。

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

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

    一般来说,有时只发出两个查询很容易。例如,一个在用户之前借过的书籍语料库中,另一个在整个语料库中。

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 2019-11-09
      • 2016-08-19
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多