【问题标题】:How to do order by case when on sphinx?在狮身人面像上如何按案例排序?
【发布时间】:2014-08-18 16:04:03
【问题描述】:

如何设置 sphinx 搜索的列优先级?在自定义mysql代码中,如下代码。如何将其重新编码为 sphinx 搜索?

$orderBy = "ORDER BY 
                        CASE WHEN SUBSTRING_INDEX(n.eser_adi, '/', 1) LIKE '% $termsAsil %' THEN 1
                           WHEN SUBSTRING_INDEX(n.eser_adi, '/', 1) LIKE '$terms' THEN 2
                           WHEN n.konu_basliklari LIKE '% $termsAsil %'  THEN 3
                           WHEN n.konu_basliklari LIKE '$terms'  THEN 4
                           WHEN yazar_adi LIKE '% $termsAsil %'  THEN 5
                           WHEN yazar_adi LIKE '$terms'  THEN 6    
                           WHEN n.isbn LIKE '% $termsAsil %'  THEN 7
                           WHEN n.isbn LIKE '$terms'  THEN 8
                           WHEN yer_numarasi LIKE '$termsAsil%' THEN 9
                           ELSE 10
                        END ASC";

【问题讨论】:

    标签: php mysql search sphinx


    【解决方案1】:

    从技术上讲,您可以将表达式放在 SELECT 部分中

    sphinxQL> SELECT id,IF(col=2,1,2) as mysort FROM index ORDER BY mysort ASC
    

    注意,没有 CASE 语句,将使用 IF() 达到相同的效果。

    但是没有 LIKE 或确实 SUBSTRING_INDEX 函数,所以它不会翻译过来。

    但是您看起来有搜索词,因此可以操纵查询以影响计算的权重。也可以使用 Field-Weights 调整相对权重。

    sphinxQL> SELECT id FROM index WHERE
      MATCH('$terms (@eser_adi ^terms | @eser_adi ^terms | @eser_adi "^terms$" | @konu_basliklari $termsAsil)')
    

    http://sphinxsearch.com/docs/current.html#api-func-setfieldweights

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多