sphinx查询广州,查不到带有 广州市 的数据

问题描述

sphinx用php sphinxClient查询数据问题,按我的意向是想搜‘广州’时,要搜出所有带‘广州’的数据,但是结果不对,遗漏了带‘广州市’三字相连的数据,详情如下:

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
查询 '广州' 代码

    $s = new \SphinxClient();
    $s->setServer("localhost", 6001);
    $s->setMatchMode(SPH_MATCH_EXTENDED2);//选择类mysql查询条件的模式
    $result = $s->query('@addrCn 广州','test');
    // return array_keys($result['matches']);
    return $result;

返回结果如下图,total字段为0

clipboard.png

你期待的结果是什么?实际看到的错误信息又是什么?

查询'广州市'代码

    $s = new \SphinxClient();
    $s->setServer("localhost", 6001);
    $s->setMatchMode(SPH_MATCH_EXTENDED2);//选择类mysql查询条件的模式
    $result = $s->query('@addrCn 广州市','test');
    // return array_keys($result['matches']);
    return $result;

返回结果如下图,total字段为18,匹配到18条数据

clipboard.png

下面是sphinx配置的数据源和索引,已执行indexer命令生成索引,searchd命令开启服务

source test{

        type = mysql
        sql_host = |我改了|
        sql_user = |我改了|
        sql_pass = |我改了|
        sql_db = |我改了|
        sql_port = 3306
        sql_query_pre = SET NAMES utf8
        sql_query = SELECT id,name,addrCn,regNo,applicantCn,intCls FROM test#要建立索引的表、字段
        #sql_attr_multi = uint intCls from field;/select id,intCls from test
        #sql_attr_multi = uint addrCn from query;
        sql_query_info_pre = SET NAMES utf8
        sql_query_info = select * from test where id =$id
}

index test{
        source = test #对应的source名称
        #存储索引的位置,路径必须真实存在,
        #如这里data下的place,需手动建立place文件夹
        #linux路径必须以/结尾
        path = /usr/local/coreseek/var/data/test/
       # docinfo = extern #默认
       # mlock =0  #默认
       # morphology = none #默认
       # min_word_len =1 #最小分词大小
       # html_strip =0 #是否过滤html标签

        charset_type = zh_cn.utf-8 #编码
        charset_dictpath = /usr/local/mmseg3/etc/  #中文分词配置
        #ngram_len = 1
        #ngram_chars = U+3000..U+2FA1F
}
阅读 698
评论
    1 个回答

    查资料发现是mmseg3.2的基础词库不够丰富,所以要自定义词库才能解决这个不算bug的bug

      撰写回答

      登录后参与交流、获取后续更新提醒

      相似问题
      推荐文章