gpt4 book ai didi

php - 跨不同对象模型的 Lucene 搜索

转载 作者:行者123 更新时间:2023-12-04 06:05:46 24 4
gpt4 key购买 nike

我正在考虑使用 Lucene 为网站提供搜索功能。

该网站包含几个不同的对象模型(例如论坛、投票等),我希望能够允许跨不同的对象模型进行搜索(即搜索论坛和|或投票)

我有两个(有些相关的)问题:

  • 对象是否需要提供一致的(即与 Lucene 相同的接口(interface))? - 例如,作为索引的所有对象是否应该具有 id、title、content 等属性,或者每个对象是否可以存储不同的数据字段?
  • 用户搜索特定关键字需要什么语法(仅投票或投票和论坛 [作为示例])?

  • 我正在使用 Lucene 的 PHP 端口。

    最佳答案

    您有 2 个选项。

  • 为每种类型的文档(论坛、投票等)创建一个单独的索引。优势,更简单的查询,更简单的文档,更准确的匹配(您的字段规范化不受其他文档数据的影响)。缺点是必须维护单独的索引,具有不同的文档。
  • 创建单个索引。您存储的 Document 将是您要查询的所有对象的所有字段的联合。您添加一个附加字段,该字段是您要存储的类型(论坛、投票等)。然后,在查询时,您按类型过滤以仅获得您想要的结果。优势,维护单个文档/索引。缺点是,您可能会在可能扭曲搜索结果的共享字段上获得一些串扰。

  • 为了澄清我在上面 2 中提到的缺点。 Lucene 对“稀有”术语具有固有的权重。如果您有一个使用稀有术语的查询,并且该术语仅出现在几个文档中,则这些文档将冒泡到搜索结果的顶部。如果您在联合中的 2 个不同文档之间共享一个字段,则可能(并非总是)搜索结果的权重与应有的不同,这对最终用户来说是显而易见的。

    为了正确性,我倾向于选项 1,为了便于维护,我倾向于选项 2。这是一个权衡。

    编辑:如果您想在单个查询中支持跨多种类型的查询,则选项 2 更可取。这是您能够混合来自不同文档类型的结果的唯一方法。由于评分算法,查询 2 个索引并尝试以某种方式对结果进行排序几乎是不可能的。

    关于php - 跨不同对象模型的 Lucene 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387686/

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