【问题标题】:Elasticsearch - how to search an URL?Elasticsearch - 如何搜索 URL?
【发布时间】:2016-11-25 14:01:17
【问题描述】:

当我将这样的数据存储到 Elasticsearch(AWS 中的 v 2.3)时遇到问题:

{
  data: {
    url: 'https://www.mydomain.tld',
    someOtherField: 'value',
  }
}

索引映射:

{
  "mappings": {
    "nodes": {
      "properties": {
        "data": {
          "properties": {
            "url": {
              "type": "string",
              "index": "not_analyzed"
            }
           }
         }
       }
     }
   }
}

我还是没有找到,如何搜索如下查询:

http:https:http://https://,等等……

长话短说,我需要使用协议搜索 URL - 完全匹配。 因为至少冒号是特殊标记,所以搜索不返回相关结果,甚至不分析字段。

有人可以帮帮我吗?

【问题讨论】:

  • 您的映射不正确,您在data 对象中缺少properties。因此,您可能需要在尝试查询之前解决此问题。
  • 对不起,我已经从更大的 JSON 中提取了这部分映射,但我忘记了。我在那里找到了properties,当我调用GET index/_mapping 时,ES 将它返回给我。固定。
  • 好的,确定一下。
  • 使用 ngram 分割 URL,并在查询时使用 terms 过滤器进行搜索。
  • 拜托,你能给我一个简单的例子安德烈吗?搜索词看起来如何与 ngrams 一起使用?如何使用 ngrams?

标签: url search elasticsearch


【解决方案1】:

对我来说,目前最好的通配符是这样的。 即使我知道这是缓慢的解决方案,它也是唯一合适的:

{
  query: {
    "wildcard" : { "data.url" : "https://foo*" }
  }
}

先决条件是不分析字段。

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多