gpt4 book ai didi

用于处理多个连接的多值字段的 SOLR 模式

转载 作者:行者123 更新时间:2023-12-05 00:43:33 27 4
gpt4 key购买 nike

假设您有这样的文档:

doc1:
id:1
text: ...
references: Journal1, 2013, pag 123
references: Journal2, 2014, pag 345

doc2
id:2
text:...
references: Journal2, 2013, pag 678
references: Journal1, 2014, pag 901

如何构建我的架构以通过引用搜索文档?我的第一个假设是这样的:

<doc>
<field name="id">1</field>
<field name="text">...</field>
<field name="ref_journal">Journal1</field>
<field name="ref_journal">Journal2</field>
<field name="ref_year">2013</field>
<field name="ref_year">2014</field>
<field name="ref_page">123</field>
<field name="ref_page">456</field>
</doc>
<doc>
<field name="id">2</field>
<field name="text">...</field>
<field name="ref_journal">Journal2</field>
<field name="ref_journal">Journal1</field>
<field name="ref_year">2013</field>
<field name="ref_year">2014</field>
<field name="ref_page">678</field>
<field name="ref_page">901</field>
</doc>

但通过这种方式我无法强制第一个 ref_journal 字段连接到第一个 ref_year 字段,因此搜索 ref_journal:Journal1 AND ref_year:2013 将错误地匹配两个文档。有没有办法让多个“连接的”多值字段?

最佳答案

如果您只需要搜索精确值,一个棘手的解决方案是使用适当的分词器将多个属性连接到一个多值字段中。

像这样定义一个“ref”类型:

<fieldType name="ref" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="\s*;\s*"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

创建一个多值字段来存储引用:

<field name="ref" type="ref" indexed="true" stored="true" multiValued="true" />

像这样格式化数据:

<doc>
<field name="id">1</field>
<field name="text">...</field>
<field name="ref">journal:Journal1; year:2013 ; page:123</field>
<field name="ref">journal:Journal2; year:2014 ; page:456</field>
</doc>
<doc>
<field name="id">2</field>
<field name="text">...</field>
<field name="ref">journal:Journal2; year:2013; page:678;</field>
<field name="ref">journal:Journal1; year:2014; page:901;</field>
</doc>

使用邻近匹配进行搜索:

ref:"year:2014; journal:Journal2"~100

注意:

  • 你不能在数据中使用分号:如果你需要它,你必须找到另一个合适的分隔符。

  • positionIncrementGap 必须大于 ref 中可能的属性数,以避免跨不同字段的匹​​配。

  • 不能使用范围查询

这不是一个通用的解决方案,但在大多数情况下它就足够了,而且可能更容易实现。

关于用于处理多个连接的多值字段的 SOLR 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22245088/

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