当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch搜索部分url

钱飞翼
2023-03-14

我正在使用ElasticSearch5,找不到以下问题的解决方案:我想在文档中搜索带斜杠的字符串(url的一部分)。但它不会返回匹配的文档。我读过一些东西,带斜线的字符串被ES拆分,这不是我想要的字段。我尝试用映射在字段上设置“not_analysis”,但似乎无法使其工作。

“创建索引”:Put http://localhost:9200/test

{
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "type1" : {
            "properties" : {
                "field1" : { "type" : "text","index": "not_analyzed" }
            }
        }
    }
}

“添加文档”:post http://localhost:9200/test/type1/

{
    "field1" : "this/is/a/url/test"
}

“Search Document”POST http://localhost:9200/test/type1/_search

{
    "size" : 1000,
    "query" : {
        "bool" : {
            "must" : [{
                    "term" : {
                        "field1" : {
                            "value" : "this/is/a/url/test"
                        }
                    }
                }
            ]
        }
    }
}

答复:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

“映射响应”:GET http://localhost:9200/test/_mapping?pretty

{
  "test": {
    "mappings": {
      "type1": {
        "properties": {
          "field1": {
            "type": "text"
          }
        }
      }
    }
  }
}

共有2个答案

蒋芷阳
2023-03-14

我怀疑您需要的是匹配查询,而不是术语查询。Terms正在寻找一个单一的“term”/单词,而不是用分析器分解您的请求。

{
    "size" : 1000,
    "query" : {
        "bool" : {
            "must" : [{
                    "match" : {
                        "field1" :  "this/is/a/url/test"                            
                    }
                }
            ]
        }
    }
}
解念
2023-03-14

使用term查询获取精确匹配是正确的。但是,您的初始映射是错误的。

"type" : "text", "index": "not_analyzed"

应该是这个

"type": "keyword"

(注意:ES5中的关键字类型等同于ES2.x中的not_analyth字符串)

您需要删除索引,并使用更正后的映射重新创建它。则term查询将工作。

 类似资料:
  • 问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回

  • 问题内容: 我正在使用Elasticsearch构建URL索引。 我将一个URL提取为3个部分,分别是“域”,“路径”和“查询”。 例如:将分为 当我想在索引中部分搜索域时出现问题,例如“ user = who”或“ ing.com”。 甚至在索引时没有使用“ Analyzer”时,是否可以使用“ Analyzer”? 如何基于分析仪进行部分搜索? 非常感谢你。 问题答案: 2种方法: 1.通配符

  • 问题内容: 我正在研究Elasticsearch 7.2版,并且正在 改善 应用程序发出的ES调用的性能。 根据我的阅读,如果我们尚未设置“搜索分析器”,则默认情况下将设置标准分析器。 但是,在不需要分析仪的情况下,安装分析仪可能会影响性能。是否将所有字段都用作“关键字”可以防止这种情况? 还是有其他方法可以禁用此“搜索分析器” 附言:对于任何答案,如果您能指出我基于答案的ES官方文档,我将不胜感

  • 问题内容: 我最近开始使用ElasticSearch,但似乎无法让它搜索单词的一部分。 示例:我有我的ouchdb中的三个文档,在ElasticSearch中建立了索引: 所以现在,我要搜索包含“ Doe”的所有文档 那不会返回任何点击。但是如果我寻找 它确实返回一个文档(John Doeman)。 我尝试将不同的分析器和不同的过滤器设置为索引的属性。我也尝试使用完整的查询(例如: ),但似乎没有

  • 主要内容:多索引此API用于在Elasticsearch中搜索内容。 用户可以通过发送具有查询字符串的获取请求作为参数或在请求的消息正文中的查询来进行搜索。所有的搜索API都是多索引,多类型。 多索引 Elasticsearch允许我们搜索存在于所有索引或一些特定索引中的文档。 例如,如果我们需要搜索名称包含的所有文档。 响应 或者,同样地我们可以在,索引中搜索 - 多类型 还可以在所有类型或某种指定类型的索引中

  • 问题内容: 我正在发送此请求 我得到正确的结果 但是当我想按单词部分搜索时,例如 我没有得到任何结果: 我究竟做错了什么? 问题答案: 这是因为您的字段可能已由标准分析器(默认设置)进行了分析,并且标题已被标记为三个标记,并且。 为了搜索单词的任何子串,您需要创建一个自定义分析器,该分析器利用ngram令牌过滤器来索引每个令牌的所有子串。 您可以这样创建索引: 然后,您可以重新索引数据。这将使标题