我们正在实现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"
        }
    }
}

最佳答案

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

    "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上进行

10-01 06:54