代码之家  ›  专栏  ›  技术社区  ›  Omar Bahareth

在Algolia上搜索相关索引

  •  0
  • Omar Bahareth  · 技术社区  · 9 年前

    我试图找出是否有一种有效的方法来搜索我当前的数据结构,或者我是否必须重新构建它们。

    我的索引结构如下:

    • 出版物(属性: id , title , keywords )
    • PublicationFile(属性: 身份证件 , publication_id , text , page_number )

    出版物有许多出版物文件,出版物文件包含该文件的内容及其所在的页面( 文本 页码 ).

    标题 , 关键词 文本 是可搜索的属性,因此如果有人搜索“经济”,我想在两个索引中搜索。

    我想执行一个搜索,搜索两个索引,并以允许我执行以下操作的方式返回结果:

    Publication1 keyword1 keyword2 Found results in Publication1's file contents in: [file a (pages: 1, 2, 3), file b (pages: 5)]

    因此,我有点希望搜索结果恰好返回按出版物ID分组的结果。我现在能想到的唯一方法是搜索两个索引,然后循环搜索结果,并将文件/页面匹配项链接到出版物。

    总之,我的问题是:

    1. 是否有一种方法可以对数据进行结构化,以避免处理数据的嵌套循环?
    2. 有没有一种方法可以通过Algolia实现这一点,而无需修改我的结构?理想情况下,我希望重新使用Algolia的前端搜索代码 避免 在我的后端处理这些数据。
    1 回复  |  直到 9 年前
        1
  •  2
  •   Maxime    9 年前

    回答您的问题:

    1) 是的,我将在下面详细介绍

    2) 不,不幸的是,您必须修改数据结构。


    以下是我建议您如何构建数据以实现您的目标。

    {
      objectID: "publicationFieIdId",
      publicationId: '',
      title: '',
      keywords: ['', ''],
      text: "",
      page_number: 1,
      published_at: 1485892992 // timestamp
    }
    

    本质上,您需要将您的两个索引展平为一个索引,以实现您的目标。与维护客户端代码相比,修改数据结构将不会那么麻烦。并且表现也更好。

    很少有文章或文档链接有助于解释原因:

    https://blog.algolia.com/inside-the-engine-part-7-better-relevance-via-dedup-at-query-time/

    https://www.algolia.com/doc/guides/search/distinct/

    希望这有帮助!

    马克西姆