在ElasticSearch中我遵循下面给出的示例文档结构的文档:
{
"ProductType": "TV",
"Manufacturer": "XYZ",
"Model": "XYZ-52-TV",
"ProductDocumentationTopic": "DeviceSpecifications",
"Content": "Lorem ipsum screen size = 10 Minim eu laborum ex veniam et ut commodo ullamco culpa irure ad nulla veniam et irure deserunt eiusmod nostrud"
}
我尝试仅在确切的特定产品中搜索Content
值。
将通过完全匹配ProductType
,Manufacturer
,Model
和ProductDocumentationTopic
的值来识别产品。
因此,按照上面给出的示例,我如何在" DeviceSpecifications"内搜索Content
。 " XYZ-52-TV"由" XYZ制造的模型电视"?
请引导适当的ElasticSearch查询。
答案 0 :(得分:0)
您应该从正确的映射定义开始,这将告诉Elasticsearch如何将您的字段存储在索引中。默认情况下,将分析JSON中的每个字符串,这意味着您可以在此类字段上执行全文搜索。更多信息here
除了Content之外,它并不是您想要实现的所有字段。因此,如果您要对所有其他字段进行过滤,则应在映射定义中将其定义为 keywords 。
PUT http://{yourhost+port}/{indexname} HTTP/1.1
{
"mappings": {
"{yourtypename}": {
"properties": {
"ProductType": {
"type": "keyword"
},
"Manufacturer": {
"type": "keyword"
},
"Model": {
"type": "keyword"
},
"ProductDocumentationTopic": {
"type": "keyword"
},
"Content": {
"type": "text"
}
}
}
}
}
然后您可以使用带过滤器的查询,您可以在其中对内容字段执行全文搜索,并为所有其他字段执行完全匹配(docs)
{
"query": {
"bool": {
"must": [
{ "match": { "Content": "size" }}
],
"filter": [
{ "term": { "Model": "XYZ-52-TV" }},
{ "term": { "Manufacturer": "XYZ" }},
{ "term": { "ProductType": "TV" }}
]
}
}
}