我的ElasticSearch v1.2.1中有一些文档,例如:
{ "tempSkipAfterSave": "false", "variation": null, "images": null, "name": "Dolce & Gabbana Short Sleeve Coat", "sku": "MD01575254-40-WHITE", "user_id": "123foo", "creation_date": null, "changed": 1 }
其中sku可以是一个变化,例如:MD01575254-40-BlUE,MD01575254-38-WHITE
sku
MD01575254-40-BlUE
MD01575254-38-WHITE
我可以让我的elasticsearch查询与此一起工作:
{ "size": 1000, "from": 0, "filter": { "and": [ { "regexp": { "sku": "md01575254.*" } }, { "term": { "user_id": "123foo" } }, { "missing": { "field": "project_id" } } ] }, "query": { "match_all": {} } }
我得到了sku的所有变体: MD01575254*
MD01575254*
但是,破折号“-”真的把我搞砸了
当我将正则表达式更改为:
"regexp": { "sku": "md01575254-40.*" }
我无法得到任何结果。我也尝试过
只是似乎无法使其正常工作?我在这里没错吗?
问题:
这是因为默认分析器通常在处标记-,因此您的字段最有可能像这样保存:
-
MD01575254
40
BlUE
解:
您可以将映射更新为具有sku.raw索引时不会分析的字段。这将要求您删除并重新编制索引。
sku.raw
{ "<type>" : { "properties" : { ..., "sku" : { "type": "string", "fields" : { "raw" : {"type" : "string", "index" : "not_analyzed"} } } } } }
然后,您可以查询未分析的新字段:
{ "query" : { "regexp" : { "sku.raw": "md01575254-40.*" } } }
HTTP端点:
删除当前映射和数据的API是:
DELETE http://localhost:9200/<index>/<type>
使用原始SKU添加新映射的API是:
PUT http://localhost:9200/<index>/<type>/_mapping
链接: