【问题标题】:Specifying multivalued term frequency in Solr update?在 Solr 更新中指定多值词频?
【发布时间】:2013-08-01 14:17:36
【问题描述】:

我有一个包含多值字段的 Solr 架构。我在 Solr 外部解析文档并使用http://wiki.apache.org/solr/UpdateJSON 更新索引(另请参阅http://wiki.apache.org/solr/UpdateXmlMessages)。下面是一个演示我要解决的问题的玩具示例。

{
  "add": {
    "doc": {
      "id": "MyDocumentID",
      "user": "MyUserID",
      "meals": ["pizza", "pizza", "pizza", "burger"]
    }
  }
}

我希望找到某种语法,可以让我指出“披萨”出现了 3 次,而无需实际写出 3 次。问题是这些频率中的一些可能是数千或数万。 (我正在使用存储的词频对搜索结果进行过滤和排名。)这样的语法存在吗?我正在编造这个,但这里有一个例子来说明这可能看起来如何。

{
  "add": {
    "doc": {
      "id": "MyDocumentID",
      "user": "MyUserID",
      "meals": ["pizza"*3, "burger"]
    }
  }
}

我怀疑答案是,如果我想要这样的行为,我需要自己编写一些 Solr 代码。我希望避免这种情况,但如果是这种情况,您仍然可以通过将我指向要处理的代码的正确区域来帮助我。

这是一个相关的 Lucene 问题:Can I insert a Document into Lucene without generating a TokenStream?

【问题讨论】:

  • 您使用的是什么 Solr 版本?
  • 对于 Solr 4.4,您可能希望从 JsonLoader 开始,这里是解析更新消息的位置(查看 parseDoc() 和 parseSingleFieldValue())。希望这会有所帮助。
  • 我使用的是 4.4.0 版本。
  • @BrianL 你找到解决方案了吗?

标签: solr


【解决方案1】:

如果您愿意解析 JSON 以创建 xml,可能有一种解决方法:

代替

 <add>
 <doc>
  <field name="employeeId">05991</field>
  <field name="skills" update="set">Python</field>
  <field name="skills" update="set">Python</field>
  <field name="skills" update="set">Python</field>
  <field name="skills" update="set">Java</field>
</doc>
</add>

你应该可以使用这个(注意技能是一个多值字段):

<add>
 <doc>
  <field name="employeeId">05991</field>
  <field name="skills" update="set" boost="3.0">Python</field>
  <field name="skills" update="set">Java</field>
</doc>
</add>

这是来自solr wiki

免责声明:我没有在一个字段中使用多个可选属性,也没有看到任何这样做的示例。

【讨论】:

  • 好主意,但我试过了,它实际上并没有改变词频(如在查询中添加 debug=true 所示)。事实上,它甚至没有按照你的想法去做并提升结果。我认为后一个问题与 Solr 没有正确支持多值字段的粒度提升有关。但这有点偏离我原来的问题。
  • 顺便说一句,如果你想知道为什么我关心改变 TF 而不是提升排名,我可以指定一个 fq 组件。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2015-03-08
  • 2017-08-11
  • 2013-09-28
  • 2015-05-06
  • 2015-04-24
  • 2015-09-08
  • 1970-01-01
相关资源
最近更新 更多