索引solr和lucene中的内容并匹配串联的电子邮件用户名

6ojccjat  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(379)

我将原始内容索引到文档中,对于包含电子邮件的文档,比如robby。pond@email.com 我需要在文件上找到robbypond。
目前我正在使用classictokenizer(用于电话号码的特殊处理)和worddelimitergraphfilter,这里是一个简化的分析器链。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    </analyzer>
</fieldType>

这将使用所有类型的email生成以下令牌。
RobbyPondGmail公司robby pond gmail公司
问题是,我有一个要求,像robbypond这样的搜索将命中文档。是否有任何现有的过滤器或参数集可以用来连接robby和pond令牌,并将robbypond令牌添加到令牌流中?

qzlgjiam

qzlgjiam1#

可以使用Map字符过滤器,它在标记器之前执行,可以替换 . 使用空字符,以便只有相关的标记组合在一起作为比较 Shingles 这将是非常昂贵的。
创建此类分析器的示例设置

{
    "settings": {
        "analysis": {
            "analyzer": {
                "my_analyzer": {
                    "tokenizer": "standard",
                    "char_filter": [
                        "replace_dots"
                    ]
                }
            },
            "char_filter": {
                "replace_dots": {
                    "type": "mapping",
                    "mappings": [
                        ". =>"
                    ]
                }
            }
        }
    }
}

并使用analyze-api检查测试令牌
发布/分析

{
    "text" : "robby.pond@email.com",
    "analyzer" : "my_analyzer"
}

和生成的代币

{
    "tokens": [
        {
            "token": "robbypond",
            "start_offset": 0,
            "end_offset": 10,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "emailcom",
            "start_offset": 11,
            "end_offset": 20,
            "type": "<ALPHANUM>",
            "position": 1
        }
    ]
}

相关问题