当前位置: 首页 > 知识库问答 >
问题:

Lucens执行“开始-开始”查询的最佳方法

杜凯
2023-03-14

示例:

对于文档:

  • video1title=大海是蓝色的
  • video2title=狂野的大海
  • video3title=狂野的大海
  • video4title=海边随便什么
    null
    null

现在,AFAIKS,没有真正的方法告诉Lucene“找到word1和word2等位于位置1和2和3等的文档。”

有一些“变通办法”可以模拟这种行为:

>

  • 对字段进行两次索引。在field1中,您将单词标记化(可能使用StandardAnalyzer),在field2中,您将它们聚集到一个元素中(使用KeywordAnalyzer)。然后,如果您搜索以下内容:

    有效地告诉Lucene“文档必须在标题中包含word1或word2或word3,而且那些匹配”标题以>word1 word2 word3<开头“的文档更好(得到更高的分数)。

    • 在索引它们时,在字段的开头添加一个“lucene_start_token”,以便video2title=Wild sea被索引为“title:lucene_start_token Wild sea”,其余的
    • 依此类推

    然后执行如下查询:

    +(标题:SEA)(标题:“lucene_start_token SEA”)

    让Lucene返回标题中包含我的搜索词的所有文档,并对匹配“lucene_start_token+search words”的文档给出更好的分数。

    我的问题是,有没有更好的方法来做到这一点(也许使用短语和术语位置)?如果不是,从总体上看,上面哪一个更好?

  • 共有1个答案

    钦侯林
    2023-03-14

    你可以使用Lucene有效载荷。您可以为字段值的每个项提供自定义增强。

    因此,当你索引你的标题时,你可以开始使用3的提升因子(例如):

    标题:Wild3.0 Creatures2.5 Blue2.0 Sea1.5

     类似资料:
    • 我有一份Spring批量申请,只有一份工作。作业执行顺序对我来说至关重要,因此配置为单线程作业池。换句话说,如果触发的执行很少,则一个执行正在运行,另一个将在队列中等待。 作业执行表将如下所示: 如果JVM崩溃,我需要从该状态恢复并进行一些审计,因此我需要找到所有和执行。 找到第一个不是问题,我可以用做到: 它只会给我执行当前。但是如何找到所有开始执行的

    • 任务被卡住了,不启动代码是在一个270M的大数据集上执行带有筛选条件的交叉联接。对于大表270M和小表(100000),我已经将分区增加到16000个,我已经将其转换为广播变量 我已经为该作业添加了spark ui, 所以我必须减少分区,增加执行器,有什么想法吗 [50per completed ui 1][4][50per completed ui 2][5][1]:https://i.stac

    • 我使用Twittertypeahead.js搜索名单的名字和客户端希望根据名字的建议。 有没有一个选项可以让Twittertypeahead.js搜索查询与每个结果的开头相匹配,而不是字符串中的任何位置? 我可以在函数中看到一个变量,但是我不知道如何将其指定为一个选项,甚至不知道这是否与我试图实现的目标有关。 在我的项目中调用typeahead的jQuery函数是: 我可以看到来自的响应格式 所以

    • 这是正在执行查询的函数: 运行此函数时,出现以下异常: SQLSTATE[HY093]:无效的参数编号:未定义参数(SQL:选择名称、总体、圆((ST_Distance(rpoint,'POINT(24.8 43.3648))):数字,1)作为距离,圆(度(ST_Axitation(rpoint,'POINT(24.8 43.3648)):数字,1)作为来自ST_DWithin(rpoint,'P

    • 我有一个问题,当查询搜索进程与Firebase Rest API。我使用startAt和endAt参数进行第一次和最后一次搜索,但它仍然没有列出。 我有一个像上面这样的输出。有两批货名为白车和红车。当我找车的时候,我希望他们两个都出来。我哪里犯错了?

    • 我不断得到: debug.log 我的包文件如下: 我是npm的新手,当我第一次下载它时,我能够在我的本地服务器上毫无问题地启动它。 我想切换我的浏览器,这样做,突然npm start有一个问题。 我知道还有其他类似的问题,但没有一个能缓解我的问题。