You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArangoDB多属性多词模糊搜索实现困境求助

ArangoDB多属性多词模糊搜索实现方案

1. 自定义分析器配置

创建适配模糊搜索的分析器,兼顾小写转换、分词,同时支持字符差异匹配的预处理:

db._createAnalyzer("fuzzy_search_analyzer", {
  "type": "custom",
  "tokenizer": {
    "type": "standard"
  },
  "filter": [
    { "type": "lowercase" },
    { 
      "type": "ngram", 
      "min": 2, 
      "max": 10, 
      "preserveOriginal": true 
    }
  ]
});

该分析器会将文本转小写、按标准规则分词,同时生成2-10长度的ngram,既支持前缀匹配,也能兼容单个字符差异的模糊场景。

2. 创建ArangoSearch视图

针对需要搜索的多属性(示例假设文档包含location、year核心字段),创建绑定分析器的搜索视图:

db._createView("docs_search_view", "arangosearch", {
  "links": {
    "your_collection_name": { // 替换为你的目标集合名
      "fields": {
        "location": {
          "analyzers": ["fuzzy_search_analyzer"]
        },
        "year": {
          "analyzers": ["fuzzy_search_analyzer"]
        }
        // 按需添加其他需搜索的属性
      },
      "includeAllFields": false,
      "storeValues": "none"
    }
  }
});

3. 编写AQL查询语句

针对输入“Macao 2024”,实现词序无关的模糊匹配,优先返回含2024的文档并取前3条:

FOR doc IN docs_search_view
SEARCH ANALYZER(
  (PHRASE(doc.location, "macao", "editDistance", 1) OR PHRASE(doc.year, "macao", "editDistance", 1)) AND
  (PHRASE(doc.location, "2024") OR PHRASE(doc.year, "2024")),
  "fuzzy_search_analyzer"
)
SORT BM25(doc) DESC // 按BM25算法排序,匹配度高的结果靠前
LIMIT 3
RETURN doc

核心说明:

  • editDistance:1允许单个字符差异,刚好适配Macao与Macau的匹配需求
  • 通过OR逻辑覆盖多属性,确保任意属性命中关键词即可返回结果
  • BM25排序会优先返回同时匹配两个关键词的文档,满足优先展示2024年文档的要求

额外注意事项

  • 若需扩展更多搜索属性,只需在视图fields中添加对应字段,并在查询中补充OR条件
  • 可根据数据特征调整分析器中ngram的min/max值,优化匹配精度
  • 测试时可先验证单个关键词的匹配效果,再逐步组合多词查询

内容的提问来源于stack exchange,提问作者Ivan Clavijos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:04:57