文档

模糊分析器

更新时间:

模糊分析介绍

模糊分析器(fuzzy)适用于模糊搜索,模糊搜索是指在用户搜索意图不明确时,搜索引擎将用户的查询(query)与待检索的内容(doc)进行模糊匹配,找出与查询相关的内容。是否相关主要从两个方面衡量:一是query是doc中某些内容的全拼或者简拼;二是query中内容直接在doc中出现。模糊搜索无法精确理解用户的查询意图,返回的结果中可能包括了一大批用户不想要的信息,所以在使用模糊搜索时一定要结合自己的实际场景,慎重使用。

使用模糊分析器schema中指定的分析器为fuzzy,在查询时需要指定analyzer子句,对应的索引的分析器为fuzzy_search_analyzer。

例如:
schema配置
{
    "fields":[
        {
            "field_type":"INT64",
            "field_name":"id"
        },
        {
            "field_type":"TEXT",
            "field_name":"title",
            "analyzer":"fuzzy"
        }
    ],
    "summarys":{
        "compress":false,
        "summary_fields":[
            "id",
            "title"
        ]
    },
    "indexs":[
        {
            "has_primary_key_attribute":true,
            "index_fields":"id",
            "is_primary_key_sorted":true,
            "index_name":"id",
            "index_type":"PRIMARYKEY64"
        },
        {
            "doc_payload_flag":1,
            "index_fields":"title",
            "index_name":"title_index",
            "index_type":"TEXT"
        }
    ],
    "attributes":[
        "id"
    ],
    "table_name":"test_table"
}

查询query:config=start:0,hit:10,format:json&&query=title_index:'abc'&&analyzer=specific_index_analyzer:title_index#fuzzy_search_analyzer

注:
* title在schema中使用了fuzzy分析器,并创建了title_index
* 查询时通过analyzer子句指定title_index使用fuzzy_search_analyzer

适用场景

模糊搜索主要应用于用户搜索意图不明确或者数据较少,且想返回较多的查询结果的时候。主要包括以下场景。

拼音搜索

介绍:拼音搜索是指doc中的数据为中文,而希望使用全拼或者简拼进行查询的搜索。

案例

文档内容为:开放搜索
query分别为:”kai”、”kaifang”、”sousuo”、“kaifangsousuo”、”k”、”kf”、”ss”、”kfss”,
均能将此条doc召回

注意事项

  • 拼音搜索查询时使用双引号查询

  • 如果希望搜索内容在doc中是相连的,建议在查询词两边加上双引号。拼音搜索中查询词两边最好都使用双引号,这是因为用户输入的拼音是具有一定的意图的,用户搜索”kfss”(开放搜索)其实是希望这些词是要连在一起的。

前缀搜索

介绍:前缀搜索是指搜索以指定前缀开头的内容的检索。

案例

#模糊搜索支持的前缀标识符为’^’,如果用户想搜以138开头的手机号
query可写成”^138”(注意是双引号查询)

注意事项

  • 不支持中文前缀匹配,

  • 前缀匹配时,query需要用双引号。

后缀匹配

介绍:后缀搜索是指搜索以指定后缀结尾的内容的检索。

案例

#模糊搜索支持的后缀标识符为’$’,如果用户想搜以9527结尾的手机号
query可以写成”9527$”(注意是双引号查询)

注意事项

  • 不支持中文后缀匹配,

  • 后缀匹配时,query需要用双引号。

单字或单字母搜索

介绍:模糊搜索支持单字或单字母搜索。单字或单字母这种使用场景主要是为了扩大召回结果,返回的结果可能不是很准确。

案例

#文档内容为:’开放搜索 open search’
query=default:’放’或者 query=default:’o’都能将其召回

短语查询

介绍:短语查询按双引号限制位置关系,并且只有连续的字母和数字可以用短语查询。

案例

#1.query=default:"开放搜索"
仅能召回文档内容为“xxx开放搜索xxx”的文档,不能召回“xxx搜索开放xxx”的文档;

#2.query=default:"华为P"
不能召回“华为P20”的文档,因为不符合“只有连续的字母和数字可以用短语查询”的规则。这种场景请使用单引号进行查询。

注意事项

  • 短语查询使用双引号

  • 短语查询召回的结果准确性更高,减少了文档召回量(一般此类搜索场景建议使用中文通用分词)比较消耗性能。

  • 模糊搜索用于搜索意图不明确或者数据较少想返回更多查询结果的场景,因此除了拼音搜索、前后缀、以及短语查询的场景,基本使用单引号。

注意事项

  • 模糊搜索返回的结果默认按照命中的词在字段的前后位置进行排序。比如某个应用的title字段需要模糊搜索,doc1的内容为开放搜索,doc2的内容为喜欢使用开放搜索,当搜索”kfss”时,doc1默认会排在doc2的前面。

  • 查询时只有英文、数字和拼音支持前缀和后缀搜索,中文不支持。

  • 使用模糊分析器的字段中的标点符号会被过滤掉。

  • 使用模糊分析器的字段中的全角字符会被转为半角字符。

  • 使用模糊分析器的字段中的英文和数字及拼音不支持飘红。