Algolia:跨多个领域搜索和评分结果

Algolia: Search across multiple fields and scoring results

我要在 algolia 中完成以下任务

上下文

我的索引中有以下记录集

[
    {
        "name" : "Don Joe",
        "experience": {
          "job_title": "Example 1",
          "superpowers": [
            "Golang", // <- MATCH (see below)
            "Vue",    // <- MATCH (see below)
            "React"
          ],
          "skills": [
            "Docker",
            "Goa",
            "Elixir",
            "Kubernetes",
            "Istio",
            "Phoenix",
            "Javascript"
          ]
      },
      "completed_at": 1590509228,
    },
    {
        "name" : "John Doe"
        "experience": {
          "job_title": "Example 2",
          "superpowers": [
            "Golang", // <- MATCH (see below)
            "Phoenix",
            "React"
          ],
          "skills": [
            "Docker",
            "Vue",    // <- MATCH (see below)
            "Kubernetes",
            "Elixir",
            "Goa",
            "Javascript",
            "Typescript"
          ]
      },
      "completed_at": 1590519361,
    }
]

可搜索属性设置为

排名是默认的,加上

我做什么

简单的文本搜索Golang Vue

我期待的

超能力优先于技能,所以"Don Joe"的超能力中有Golang和Vue(而"John Doe"有Golang超能力和Vue技能)应该先出现

取而代之的是什么

2条得分相同,平局算法给出错误的(这不是这里的主要问题,问题是它们首先得分相同)

知道我应该如何配置 algolia 来执行我期望的操作吗?

提前致谢

解决方案

我是这样解决的:

  1. 将文本搜索转换为 "facets based" 搜索
  2. experience.skillsexperience.superpowers 设置为分面
  3. 使用一系列 OR 带分数的过滤器来获得所需的方面
    {
       "filters": "experience.skills:Vue<score=1> OR experience.skills:Golang<score=1> OR experience.superpowers:Vue<score=2> OR experience.superpowers:Golang<score=2>",
       "sumOrFiltersScores": true 
    }
    
    重要:设置"sumOrFiltersScores": true启用分数总和并使用加权搜索
  4. 使用上一步中的负载调用您的搜索方法。

资源:

https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/filter-scoring/