【问题标题】:How to implement usual and exact match search based on the same fields in index?如何实现基于索引中相同字段的常规和精确匹配搜索?
【发布时间】:2016-09-23 14:54:31
【问题描述】:

我们正在为我们的项目中具有名称、备用名称、不同标识符、地址等的各方编制索引。除了通常的搜索功能(不带引号)之外,我们还希望使用单引号/双引号的 STRICT 精确搜索功能。

为了实现这一点,我们配置了两个不同的搜索处理程序,并根据用户输入中存在的引号在它们之间切换。此外,我们使用 KeywordTokenizerFactory(用于 STRICT 完全匹配搜索)和 StandardTokenizerFactory(用于常规搜索)对所有提及方的属性进行了索引。

但问题是我们将 Solr 索引中的字段数量增加了一倍,并且其大小自然也增加了一倍。

所以问题是:是否有可能实现基于 Solr 索引中每个参与方属性的一个字段的两种类型的搜索?

【问题讨论】:

    标签: solr


    【解决方案1】:

    如果您使用单个字段实现了相同的功能,那么您在索引中的数据量或多或少仍然是准确的。您搜索的标记仍然必须存在并存储在某个地方,您最终会遇到一个令人困惑的情况,即很难对同一字段中包含的不同“类型”中的命中进行评分和排名(出于所有目的,这将是两个字段,只是具有相同的名称..所以..这是两个字段..)

    使用当前的两个字段是执行此操作的方法。但请记住,您不必为所有字段存储内容(对于与其他字段具有相同值的字段,请使用 stored="false")。两个/所有字段的值都相同,因此只需显示第一个字段的值,但同时搜索它们/仅第一个/仅第二个。

    另一个减少索引大小的选择是只存储字段的 id,然后不存储任何其他字段。之后通过查找命中的 id 从主数据存储中检索任何值。

    还有many options you can disable 用于特定字段 - 根据您使用字段的方式,可能不需要这些字段,例如termVectors 等。

    【讨论】:

    • 您的意思是将第二个字段类型标记为 stored="false" 和
    • 是的,然后使用“name”中的字段值 - 因为您不需要 nameStrictMatch 中的存储值。但是,如果您正在突出显示或使用其他可能需要现场内容的功能等,这可能会发生变化,因此您需要对其进行调整以供自己使用。
    • 我们正在使用突出显示和分面。为了突出显示,我们需要匹配实体属性的内容,以便在搜索结果中显示它。
    • 如果您想继续突出显示,您可以按“名称”字段搜索,但另外“按“名称严格匹配”字段过滤。然后,您会在保持突出显示的情况下收到所需的结果。 // 你需要“存储”只有“名称”字段。刻面也适用于不可存储的字段。
    • 您也可以在单独的字段中使用单独的查询来突出显示,请参阅hl.qhl.fl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2013-07-19
    相关资源
    最近更新 更多