【问题标题】:How to query Solr to get the documents if it matches 50% of the query string?如果它与查询字符串的 50% 匹配,如何查询 Solr 以获取文档?
【发布时间】:2020-01-10 08:32:45
【问题描述】:

我使用的是Solr 7.6,文档结构如下:

{
    "source_ln":"en",
    "source_text":"the sky is blue",
    "target_ln":"hi",
    "target_text":"आसमान नीला है",
},
{
    "source_ln":"en",
    "source_text":"the sky is also called the celestial sphere",
    "target_ln":"hi",
    "target_text":"आकाश को आकाशीय क्षेत्र भी कहा जाता है",
}

所有字段都使用 StandardTokenizerFactory 标记器定义。

当我查询“source_text”:“天空”时,

结果集应该只包含第一个文档。

在第二个文档中,字段 "source_text":"the sky is also called the celestial sphere" 包含 8 个术语,而查询字段 "source_text":"the sky" 仅包含 2 个术语,所以至少 50%不满足匹配条件,因此第二个文档不会出现在结果集中。

有没有办法让文档匹配至少 50% 的查询字段术语/标记?

提前致谢。

【问题讨论】:

    标签: solr lucene dismax


    【解决方案1】:

    您可以将请求处理程序设置为使用(e)dismax 查询解析器,例如使用defTypeparameter,例如。 ?q=...&defType=dismax.

    使用dismax解析器,然后可以根据需要使用mm (Minimum Should Match)参数,只需设置mm=50%即可。

    【讨论】:

      【解决方案2】:

      您可以通过执行以下步骤来实现这些功能。

      • 在您的架构名称“source_text_fifty”中创建单独的字段, param(indexing=true, storage=false, 不适用 StandardTokenizerFactory 语法类型或更好地单独创建 solr.KeywordTokenizerFactory 的数据类型字段)。
      • 现在,在索引文档和存储期间计算 50% 的输入 “source_text_fifty”字段中的那些计算数据。
      • 使用上述逻辑重新索引所有现有数据。
      • 使用 source_text_fifty:"the sky" 运行查询。现在你只得到了一个 50% 的匹配数据。

      【讨论】:

      • “在索引文档期间计算 50% 的输入”是什么意思?实际上我正在使用 Solr 来构建语言翻译。所以我正在寻找获得最相关的部分匹配结果的功能。
      • 在部分匹配结果的情况下,这 50% 的逻辑不起作用。这仅适用于从字符串开始的精确 50% 匹配。根据你的例子。
      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 2011-03-12
      • 2021-12-06
      • 2020-05-07
      • 2019-04-28
      • 2012-05-05
      • 2011-01-16
      相关资源
      最近更新 更多