全文索引以及三元分词使用规则

warning: 这篇文章距离上次修改已过1650天,其中的内容可能已经有所变动。

    GBase 8a全文索引原有的分词方式是中文按单个汉字切分,如“天津市”会被切分成“天/津/市”;英文按连续字母切分,如“gbase -uroot”会被切分成“gbase/-/uroot”;
    数字也是按连续的数字切分,如“12345 67890”会被切分成“12345/67890”。对于以上情况的混合,同样遵循上面的规则,如“中国56 897gbase1234”会被切分成“中/国/56/897/gbase/1234”。这样的规则会使得“gbase1234”被切分为“gbase/1234”,这时使用“gba”或“123”是无法匹配到“gbase1234”的。
    但在客户应用中,对这种场景有实际的需求。以数字的3元分词为例,如用户查询牌照号,希望用“567”匹配出“京AX4567”,因为目前的分词结果为“京”,“AX”,“4567” ,所以使用全文的contains(..., '567')不能命中“京AX4567”。必须改动分词为支持数字的多元(3元)分词,将“京AX4567”切分为“京”,“AX”,“456”,“567”,才能使得contains(..., '567')能匹配“京AX4567”。

    三元分词的“3”是指当连续的英文或数字超过3个时,按3个一组切分。如果原始数据正常切分就不足3个,那就直接当成一个key存到索引中了。如“中铁12朝阳”切分结果为“中/铁/12/朝/阳/”,“12”虽然不足3位,但它也是有效数据,当成一个单独的key存入索引中,因此使用'"铁12朝"'能匹配上。
    对于内容“中铁12306”来说,其三元切分的结果是“中/铁/123/230/306”,而查询关键字“中铁1”,其三元切分的结果是“中/铁/1”,索引里没有“1”,因此使用“中铁1”查询不到,而使用“中铁123”能查询到。
开启多元分词,修改配置文件$GBASE_HOME/lib/gbase/plugin/gbfti/cfg/GbaseCharExt.xml,将multinum值由默认的0改为相应的值(1 数字多元分词;2 英文多元分词;3 数字和英文多元分词);如果需要建立非三元分词,再将step值修改为相应数字,如2元分词就将step值改为2。

添加新评论