gpt4 book ai didi

lucene - 如何与SOLR/lucene中的搜索字符串子集匹配

转载 作者:行者123 更新时间:2023-12-04 18:15:07 25 4
gpt4 key购买 nike

我有一个不寻常的情况。通常,当您搜索文本索引时,您将针对具有大量术语的文档搜索少量的关键字。

例如,您可能搜索“快速棕色”,并期望与“快速的棕色狐狸跳过懒狗”相匹配。

我遇到的情况是我的文档存储中有很多小短语,我希望将它们与较大的查询短语匹配。

例如,如果我有一个查询:

  • “快速的棕色狐狸跳过了懒狗”

  • 和文件
  • “快速棕色”
  • “狐狸翻了”
  • “懒狗”

  • 我想查找查询中出现短语的文档。在这种情况下,“棕色快速”和“懒狗”(但不能“翻过来”,因为尽管 token 匹配,但它不是搜索字符串中的短语)。

    SOLR/lucene是否可能进行这种查询?

    最佳答案

    听起来您想在分析中使用ShingleFilter,以便为单词bigrams编制索引:因此在查询和索引时都添加ShingleFilterFactory。

    在索引时,您的文档将按以下方式进行索引:

  • “快速棕色”-> quick_brown
  • “fox over”-> fox_over
  • “懒狗”-> lazy_dog

  • 在查询时,您的查询将变为:
  • “快速的棕色狐狸跳过懒惰的狗”->“the_quick quick_brown棕色的狐狸狐狸跳跃” overs_the_lazy懒惰的懒惰的狗“

  • 这还是不好的,默认情况下它将构成一个短语查询。
    因此,在您的 查询分析器中,只有在ShingleFilterFactory之后添加PositionFilterFactory。这会“拉平”查询中的位置,以便queryparser将输出视为同义词,这将产生带有这些子项的 bool 查询(所有SHOULD子句,因此基本上是OR查询):

    bool 查询:
  • the_quick或
  • quick_brown或
  • brown_fox或
  • ...

  • 这应该是最高效的方式,因为它实际上只是一个termqueries的 bool 查询。

    关于lucene - 如何与SOLR/lucene中的搜索字符串子集匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882481/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com