将模式分析器添加到新索引
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
中看到的只是您索引的确切文本,而不是内部实际解析和索引的方式。
我正在尝试将公司数据存储在 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
中看到的只是您索引的确切文本,而不是内部实际解析和索引的方式。