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

时间:2015-10-20 11:23:37

标签: elasticsearch nest

我正在尝试将公司数据存储在 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": "$250,000",
                "industryHierarchy": "media.news,media,retail.book,retail.electronics,retail",
                "addressCountryCode": "United States",
                "region": "California"
            }
        } ]
    }
}

1 个答案:

答案 0 :(得分:0)

使用fielddata_fields检查是否按照您希望的方式拆分了某些内容:

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

如果能给你这样的东西:

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

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