elasticsearch 为Solr和Lucene中的内容编制索引,并在连接的电子邮件用户名上进行匹配
我正在将原始内容索引到文档中,如果文档中包含robby之类的电子邮件,则会将原始内容索引到文档中。pond@email.com我需要搜索一下robbypond找到的文件 目前我正在使用ClassicTokenizer(也用于电话号码的特殊处理)和WordDelimiterGraphFilter,这里是一个简化的分析器链elasticsearch 为Solr和Lucene中的内容编制索引,并在连接的电子邮件用户名上进行匹配,elasticsearch,search,solr,lucene,elasticsearch,Search,Solr,Lucene,我正在将原始内容索引到文档中,如果文档中包含robby之类的电子邮件,则会将原始内容索引到文档中。pond@email.com我需要搜索一下robbypond找到的文件 目前我正在使用ClassicTokenizer(也用于电话号码的特殊处理)和WordDelimiterGraphFilter,这里是一个简化的分析器链 <fieldType name="text" class="solr.TextField" positionIncrementGap
<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>
这将使用所有类型的电子邮件生成以下令牌
robby pond gmail com robby pond gmail com
问题是,我有一个要求,像robbypond这样的搜索将命中文档。是否有任何现有筛选器或参数集可用于连接robby和pond令牌,并将robbypond令牌添加到令牌流?您可以使用,它在令牌赋予器之前执行,并可以用空字符替换
,因此,与成本非常高的木瓦相比,只有相关的代币组合在一起
创建此类分析器的示例设置
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"replace_dots"
]
}
},
"char_filter": {
"replace_dots": {
"type": "mapping",
"mappings": [
". =>"
]
}
}
}
}
}
并使用AnalyzeAPI检查和测试令牌
POST/\u分析
{
"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
}
]
}
{
“代币”:[
{
“令牌”:“robbypond”,
“起始偏移量”:0,
“端部偏移”:10,
“类型”:“,
“位置”:0
},
{
“令牌”:“emailcom”,
“起始偏移量”:11,
“端部偏移”:20,
“类型”:“,
“职位”:1
}
]
}
您可以使用,它在标记器之前执行,可以用空字符替换
,这样与木瓦相比,只有相关的标记组合在一起,这将非常昂贵
创建此类分析器的示例设置
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"replace_dots"
]
}
},
"char_filter": {
"replace_dots": {
"type": "mapping",
"mappings": [
". =>"
]
}
}
}
}
}
并使用AnalyzeAPI检查和测试令牌
POST/\u分析
{
"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
}
]
}
{
“代币”:[
{
“令牌”:“robbypond”,
“起始偏移量”:0,
“端部偏移”:10,
“类型”:“,
“位置”:0
},
{
“令牌”:“emailcom”,
“起始偏移量”:11,
“端部偏移”:20,
“类型”:“,
“职位”:1
}
]
}
Shingle过滤器将为您连接连续的令牌,并带有可选的分隔符:-但这取决于您需要这些匹配的精确程度(即,您将丢失有关gmail.com的元数据,因此您还将获得作为令牌的pondgmail
。@Robby您是否有机会查看我的答案,如果您有任何疑问,请随时发表评论,这已经是相当长的一段时间了,如果您可以提供更新,那将是非常好的:)Shingle筛选器将为您连接连续的令牌,并带有可选的分隔符:-但这将取决于您需要这些匹配的精确程度(也就是说,你会丢失gmail.com在@
之后的元数据,因此你也会得到pondgmail
作为代币)。@Robby你有没有机会查看我的答案,如果你有任何疑问,请随时发表评论,这已经是相当长的一段时间了,如果你能提供更新,那就太好了:)