将模式分析器添加到新索引

Adding a pattern-analyzer to a new index

我正在尝试将公司数据存储在 elasticsearch 中,因此我正在创建一个新索引来存储公司数据。其中一个字段 IndustryHierarchy 是以逗号分隔的行业代码列表,我希望它可以单独搜索。

我正在这样创建索引:

client.CreateIndex(ci => ci.Index("companydata")
    .AddMapping<ElasticCompany>(m => m
        .MapFromAttributes()
        .Properties(props => props
            .String(s => s
                .Name(p => p.IndustryHierarchy)
                .IndexAnalyzer("pattern")
            )
        )
    )
);

我不知道的是如何将正则表达式传递给 IndexAnalyzer 以便它知道在 , 上拆分(或者我的定界符恰好是什么)。


我尝试使用 PUT 手动创建索引,使用此命令(我现在使用 word_delimiter,因为它似乎是一个更简单的测试):

PUT http://10.10.0.223:9200/companydata

{
        "settings": {
            "analysis": {
                "filter": {
                    "csv_filter": {
                        "type": "word_delimiter"
                    }
                },
                "analyzer": {
                    "csv_analyzer": {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": [
                            "lowercase",
                            "csv_filter"
                        ]
                    }
                }
            }
        },
        "mappings": {
            "company": {
                "properties": {
                    "industryHierarchy": {
                        "type": "string",
                        "analyzer": "csv_analyzer"
                    }
                }
            }
        }
    }

但是,如果我进行搜索,结果似乎并未表明已拆分:

GET http://10.10.0.223:9200/companydata/company/_search&q=name:testco&pretty=1

{
    "took" : 2,
    "timed_out" : false,
    "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "hits" : {
        "total" : 1,
        "max_score" : 0.5,
        "hits" : [ {
            "_index" : "companyinfo",
            "_type" : "company",
            "_id" : "22572",
            "_score" : 0.5,
            "_source":{
                "id": 22572,
                "name": "testco",
                "domainName": "www.testco.com",
                "revenue": "0,000",
                "industryHierarchy": "media.news,media,retail.book,retail.electronics,retail",
                "addressCountryCode": "United States",
                "region": "California"
            }
        } ]
    }
}

使用 fielddata_fields 检查是否已按您希望的方式拆分:

GET /companydata/company/_search
{
  "fielddata_fields": ["industryHierarchy"]
}

如果会给你这样的东西:

        "fields": {
           "industryHierarchy": [
              "media",
              "media.news",
              "retail",
              "retail.book",
              "retail.electronics"
           ]
        }

这表明您的分析仪按预期工作。 查询时,您在 _source 中看到的只是您索引的确切文本,而不是内部实际解析和索引的方式。