Elasticsearch Analyzer忽略连字符

时间:2015-05-20 16:55:27

标签: c# elasticsearch search-engine nest analyzer

我们正在实施Elasticsearch并在.NET解决方案中使用.Nest。我们已经创建并加载了一个包含多个字段的索引。我们希望定义和分析器在用户输入UNV-1234UNV1234时为itemNumber字段生成相同的搜索结果。 itemNumber字段仅限于项目编号,不包含其他单词。但是,项目编号字段可能有一个以空格分隔的数字。

根据我的搜索,关键字分析器似乎会提供所需的结果。这不适合我们。

有人可以提供有关如何最好地完成此任务的信息吗?

"itemNumber": {
    "type": "string",
    "index": "not_analyzed",
    "fields": {
        "_english": {
        "type": "string",
        "analyzer": "english"
        },
        "_keyword": {
        "type": "string",
        "analyzer": "keyword"
        },
        "_standard": {
        "type": "string",
        "analyzer": "standard"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要使用"关键字"定义自定义分析器。 tokenizer和模式替换标记过滤器以删除任何特殊字符并将其用于您的字段。分析仪可以定义如下

    "analysis" : { 
        "filter" : { 
            "cleanspecial": { 
                "type": "pattern_replace", 
                "pattern": "[^a-zA-Z0-9]", 
                "replacement": "" 
            } 
        }, 
        "analyzer" : { 
            "cleanspecialanalyzer": { 
                "filter": ["cleanspecial"], 
                "type": "custom", 
                "tokenizer": "keyword" 
             }
         }
    }

注意:请验证模式,我还没有对其进行测试。

您可以按以下方式更改映射

"itemNumber": {
    "type": "string",
    "index": "not_analyzed",
    "fields": {
        "_english": {
        "type": "string",
        "analyzer": "english"
        },
        "_keyword": {
        "type": "string",
        "analyzer": "cleanspecialanalyzer"
        },
        "_standard": {
        "type": "string",
        "analyzer": "standard"
        }
    }
}

可以在字段itemNumber._keyword

上进行搜索