ax_rd
5 hours ago 60eb89c12ee0661785395bff90940204b16dcb3a
internal/search/engine.go
@@ -36,8 +36,24 @@
   // 合并所有关键词
   allKeywords := append(append(keywords, opts.Expanded...), opts.Symptom...)
   // 长 CJK 词 bigram 展开(统一下沉):FTS5 unicode61 把连续中文当整串单 token,
   // 长复合词整串 LIKE 匹配不到;ExpandCJKKeywords 拆成 bigram 滑动窗口
   // (原词保留、去重保序)。bigram 参与检索,textScore 按 ScoreExpanded 档计权
   // (与现有 Expanded 机制一致),原词仍按原词档。
   searchKeywords := ExpandCJKKeywords(allKeywords)
   originalSet := make(map[string]bool, len(allKeywords))
   for _, kw := range allKeywords {
      originalSet[kw] = true
   }
   var bigrams []string
   for _, kw := range searchKeywords {
      if !originalSet[kw] {
         bigrams = append(bigrams, kw)
      }
   }
   // 1. 双通道检索(ASCII 走 FTS,CJK 走 LIKE)
   candidates, err := store.KeywordSearch(allKeywords, 100)
   candidates, err := store.KeywordSearch(searchKeywords, 100)
   if err != nil {
      return nil, err
   }
@@ -55,6 +71,10 @@
      for _, kw := range opts.Expanded {
         score += scoreResult(r, kw, ScoreExpanded)
      }
      // bigram 展开词按 Expanded 档计权(与用户显式扩展词同档)
      for _, kw := range bigrams {
         score += scoreResult(r, kw, ScoreExpanded)
      }
      for _, kw := range opts.Symptom {
         score += scoreResult(r, kw, ScoreSymptom)
      }