我正在尝试将公司数据存储在 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"
}
} ]
}
}
答案 0 :(得分:0)
使用fielddata_fields
检查是否按照您希望的方式拆分了某些内容:
GET /companydata/company/_search
{
"fielddata_fields": ["industryHierarchy"]
}
如果能给你这样的东西:
"fields": {
"industryHierarchy": [
"media",
"media.news",
"retail",
"retail.book",
"retail.electronics"
]
}
表示您的分析仪按预期工作。
您在查询时在_source
中看到的只是您编制索引的确切文本,而不是内部实际解析和索引的方式。