弹性搜索如何分析URL /带有'-'的单词

时间:2018-07-10 13:36:49

标签: elasticsearch elasticsearch-5

我正在尝试找出一种分析单词/ URL中带有“-”的方法。例如“ nnn999-9-prod-nnn9.test.com” | “ Cisco-NX-4”)。

这意味着“ nnn999-”将不匹配任何内容,但是“ nnn999”或“ nnn999- *”将匹配任何内容,但我希望“ nnn999-”也能够匹配。

我已经尝试过使用标准分析器和“ uax_url_email”令牌生成器,但是它们都以相同的方式解析它们并给出相同的令牌[“ nnn999”,“ 9”,“ prod”,“ nnn9”,“ test.com”]。我要做的最后一件事是为每个属性(10+)使用正则表达式创建一个自定义分析器。

不胜感激!

2 个答案:

答案 0 :(得分:1)

开箱即用,具有默认映射,您的示例应该可以运行。它将为索引和查询使用相同的标准分析器,因此您对“ nnn999-”的查询将转换为“ nnn999”。例如:

存储文档

>>> import hashlib
>>> file_text = 'content'
>>> hashlib.sha256(file_text.encode()).hexdigest()
'ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73'
>>> 

搜索文档

POST my-index/_doc
{
  "test": "nnn999-9-prod-nnn9.test.com"
}

结果

GET my-index/_search
{
  "query": { "match": { "test": "nnn999-" } }
}

查看索引映射会很有用。

答案 1 :(得分:0)

从文档中有效地,我们可以认为这在您的情况下有效,但::

whitespace tokenizer可以为您完成这项工作吗?

GET _analyze
{
  "tokenizer" : "whitespace",
  "text" : "Cisco-NX-4 noise1 noise2 nnn999-9-prod-nnn9.test.com"
}

=>

{
  "tokens": [
    {
      "token": "Cisco-NX-4",
      "start_offset": 0,
      "end_offset": 10,
      "type": "word",
      "position": 0
    },
    {
      "token": "noise1",
      "start_offset": 11,
      "end_offset": 17,
      "type": "word",
      "position": 1
    },
    {
      "token": "noise2",
      "start_offset": 18,
      "end_offset": 24,
      "type": "word",
      "position": 2
    },
    {
      "token": "nnn999-9-prod-nnn9.test.com",
      "start_offset": 25,
      "end_offset": 52,
      "type": "word",
      "position": 3
    }
  ]
}