我在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
我可以使用弹性搜索查询来处理这个问题:
{ "size": 1000, "from": 0, "filter": { "and": [ { "regexp": { "sku": "md01575254.*" } }, { "term": { "user_id": "123foo" } }, { "missing": { "field": "project_id" } } ] }, "query": { "match_all": {} } }
我得到了sku的所有变化: MD01575254*
然而,破折号' - '真的搞砸了我
当我将正则表达式更改为:
"regexp": { "sku": "md01575254-40.*" }
我无法得到任何结果.我也试过了
"sku":"md01575254-40.*"
"sku":"md01575254\-40.*"
"sku":"md01575254-40 - .*"
...
只是似乎无法使它工作?这里我没有错?
问题:
这是因为默认分析器通常标记为-
,因此您的字段最像保存,如:
MD01575254
40
BlUE
解:
您可以更新映射以使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
链接:
映射中的多个字段
分析仪