如何基于索引中的相同字段实现常规和完全匹配搜索?

时间:2016-09-23 14:54:32

标签: solr

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

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您使用单个字段实现了相同的功能,那么您在索引中仍然具有或多或少的确切数据量。您正在搜索的令牌仍然必须存在并存储在某个地方,并且您最终会遇到一个令人困惑的情况,即在不同的情况下进行评分并对其进行排名非常困难&#34 ;类型"包含在同一个字段中(出于所有目的,它将是两个字段,只是具有相同的名称..所以..它是两个字段..)

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

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

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