美文网首页搜索引擎
姓名搜索纠错问题调研

姓名搜索纠错问题调研

作者: SHAN某人 | 来源:发表于2018-03-23 22:14 被阅读68次

    1. 姓名搜索的特殊性

    大部分人在搜索框键入汉字的时候用的是拼音输入法,所以大部分人员搜索纠错问题其实是拼音纠错问题。

    eg:

    • 杨长青 --> 杨常青
    • 刘明越 --> 刘明月
    • 章jun --> 章俊
    • 卢洪波 --> 卢红波
    • yangchangqin --> 杨常青

    2. ES 的纠错支持

    ES 5.x 版本在suggester api下有term suggester 、phrase suggester提供对纠错的支持,ES的纠错基于编辑距离,suggester api下还有completion suggester可以做补全类型搜索建议,另外还有最强大的Context Suggester提供类别查询和地理映射。

    2.1phrase suggester 纠错

    term suggester支持对单个文本进行纠错,所以采用这种就不能对纠错文本进行分词。
    新建测试索引

    PUT /dis_sugs_test
    

    建索引mapping,注意使用 term suggester的字段不能分词 。

    PUT /dis_sugs_test/_mapping/SUGNAME
      {
      "properties": {
         "sugs": {
            "type": "keyword"
         },
        "name": {
                "type": "keyword"
        }
      }
    }
    

    灌入一些测试数据

    POST _bulk/?refresh=true
    { "index" : { "_index" : "dis_sugs_test", "_type" : "SUGNAME" } }
    { "name": "yanchangqing"}
    

    试试纠错效果,注意min_word_length默认值为4,一般中文人名为3个字,如果不设值是没有召回数据的。其余term 纠错属性可查阅官方文档。

    GET /dis_sugs_test/SUGNAME/_search
    { 
      "suggest": {
        "my-suggestion": {
          "text": "yanchangqin",
          "term": {
            "field": "name",
            "suggest_mode": "always",
            "min_word_length": 1
          }
        }
      }
    }
    
    2.2phrase suggester 纠错

    phrase suggester 对纠错文本分词之后存在字典里。

    POST _analyze
    {
      "text": [
        "Lucene is cool",
        "Elasticsearch builds on top of lucene",
        "Elasticsearch rocks",
        "Elastic is the company behind ELK stack",
        "elk rocks",
        "elasticsearch is rock solid"
      ]
    }
    
    {
      "tokens": [
        {
          "token": "lucene",
          "start_offset": 0,
          "end_offset": 6,
          "type": "<ALPHANUM>",
          "position": 0
        },
        {
          "token": "is",
          "start_offset": 7,
          "end_offset": 9,
          "type": "<ALPHANUM>",
          "position": 1
        },
        {
          "token": "cool",
          "start_offset": 10,
          "end_offset": 14,
          "type": "<ALPHANUM>",
          "position": 2
        }
      ]
    }
    

    phrase suggester 通过存了token 的位置数据,考虑到了词之间的关系,同时记录多次的token在倒排索引里记录的词频会比较高,当进行文本纠错时,phrase suggester基于共现和频率来做出关于选择哪些 token 的更好的决定。

    我们目前做的人员姓名纠错不是短文本纠错,所以选择使用term suggester api可满足我们的需要。

    关于term suggester 和 phrase suggester 的具体参数细节参考elasticsearch官网 https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-suggesters.html,
    有一个组织做了翻译工作 http://cwiki.apachecn.org/display/Elasticsearch/Term+suggester

    3. 人名纠错策略

    由于大部分的人名纠错问题都可以归于拼音问题,而单纯的汉字姓名进行编辑距离纠错召回失掉了拼音信息,所以目前采用的汉字转拼音之后再进行纠错。

    参考链接:

    https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-suggesters.html
    https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-suggesters-phrase.html
    http://cwiki.apachecn.org/display/Elasticsearch/Phrase+Suggester
    https://www.jianshu.com/p/d1da9b0a04aa
    https://elasticsearch.cn/question/493
    https://discuss.elastic.co/t/what-are-the-best-approach-for-chinese-japanese-language-indexing-and-searching/79
    https://github.com/medcl/elasticsearch-analysis-ik/issues/266
    https://www.bbsmax.com/A/ZOJPXK9PJv/

    相关文章

      网友评论

        本文标题:姓名搜索纠错问题调研

        本文链接:https://www.haomeiwen.com/subject/nzuxcftx.html