如果它匹配查询字符串的50%,如何查询Solr以获取文档?

时间:2020-01-10 08:32:45

标签: solr lucene dismax

我正在使用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”:“天空也称为天球”包含8个术语,而查询字段“ source_text”:“天空”仅包含2个术语,因此至少50%不符合匹配条件,因此第二文档将不在结果集中。

有什么方法可以使文档匹配至少50%的查询字段术语/令牌?

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  • 在架构名称“ source_text_fifty”中创建单独的字段, 参数(索引为true,存储为false,并且不适用 StandardTokenizerFactory语法类型或更佳创建单独的 数据类型字段为solr.KeywordTokenizerFactory)。
  • 现在,在将文档编入索引并将其存储期间,计算您输入的50% 那些在“ source_text_fifty”字段中计算出的数据。
  • 使用上述逻辑重新索引所有现有数据。
  • 使用source_text_fifty:“天空”运行查询。现在您只有一个50%的匹配数据。