message:org.jooq.exception.TooManyRowsException
message:*TooManyRowsException
该字段中的映射是:
"messages": {
"match": "*message",
"match_mapping_type":"string",
"mapping": {
"type":"text",
"analyzer":"custom_standard"
}
}
所以,我想我误解了通配符在ES中是如何工作的。有人知道为什么*
不匹配文本字段中的“任何字符”吗?
谢了。
message:*.TooManyRowsException
message:"*TooManyRowsException"
message:(*TooManyRowsException)
message:TooManyRowsException
>
curl -H 'Content-Type: application/json' -XPUT localhost:9200/twitter
{
"settings": {
"analysis": {
"analyzer": {
"custom_standard": {
"type": "custom",
"tokenizer": "uax_url_email",
"filter": ["lowercase", "snowball", "stop"]
}
},
"normalizer": {
"custom_lowercase": {
"type": "custom",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"dynamic_templates": [
{
"messages": {
"match": "*message",
"match_mapping_type":"string",
"mapping": {
"type":"text",
"analyzer":"custom_standard"
}
}
}
]
}
}
curl -s -H 'Content-Type: application/json' -XPOST localhost:9200/twitter/_doc
{
"message": "org.jooq.exception.TooManyRowsException"
}
curl -s -H 'Content-Type: application/json' -XGET localhost:9200/twitter/_search
{
"query": {
"query_string": {
"query": "message:org.jooq.exception.TooManyRowsException"
}
}
}
curl -s -H 'Content-Type: application/json' -XGET localhost:9200/twitter/_search
{
"query": {
"query_string": {
"query": "message:*TooManyRowsException"
}
}
}
忽略此,请参见编辑2
我想你确实误解了通配符是如何工作的。你能偶然发布你的完整映射吗?我知道您使用的是动态映射,但是动态映射用于根据条件设置字段的类型,与搜索行为无关。例如,映射将采用名称以message结尾的所有字符串字段,并将其映射为文本字段。
这是否是您想要的还很难说,但是如果您这样做是为了允许通配符搜索,那么您可能不需要这些。
要执行通配符搜索,实际上只需要在查询字符串的适当位置使用*
。
{
"query": {
"query_string": {
"query": "*.TooManyRowsException",
"default_field" : "message",
"allow_leading_wildcard": true
}
}
}
或
{
"query": {
"query_string": {
"query": "*message:.TooManyRowsException",
"allow_leading_wildcard": true
}
}
}
应该匹配所有以message:
开始并以.ToomanyRowsExceptions
结束的异常。您可能还希望将default_field
设置为messages
。更多的信息可以在这里找到。另外,query_string查询不仅仅允许通配符搜索。它分析查询,并解析和
或或
等内容。就像@Gabriel提到的,如果您只想要通配符搜索,通配符查询对您来说可能是一个更好的选择:
{
"query": {
"wildcard": {
"message": {
"value": "*.TooManyRowsException",
}
}
}
}
编辑:根据反馈更改查询示例
编辑2:您的查询确实是正确的。问题似乎在于您的自定义分析器。查询字符串与Analysed字段匹配,您的uax_email_analyzer基于标准分析器:
{
"analyzer": "custom_standard",
"text": "org.jooq.exception.TooManyRowsException"
}
回报
{
"tokens" : [
{
"token" : "org.jooq.exception.toomanyrowsexcept",
"start_offset" : 0,
"end_offset" : 39,
"type" : "<ALPHANUM>",
"position" : 0
}
]
}
因此,您的inital查询将不匹配,而
{
"query": {
"query_string": {
"query": "message:*org.jooq.exception.toomanyrowsexcept"
}
}
}
实际上返回匹配项。我可能会对异常消息等字段使用不同的分析器,但也可以先通过分析器发送查询文本。
问题内容: 我很难用Elasticsearch构建查询。 我想查询类似的东西: 所以我试图构造的是这样的: 但这似乎返回一个错误。 谁能给我一个指针,我应该如何看待用Elasticsearch进行这种OR查询? 我当前的数据已发送: 和我的查询: 返回此错误: 问题答案: 这是由于JSON格式错误所致。此查询的正确JSON格式如下-
我在努力实现这个目标: 通过bool查询筛选出结果,如“status=1” 通过布尔范围查询筛选出结果,如“discance:gte 10和lte 60” 通过从int数组中匹配至少一个int值筛选出结果 在多个字段中搜索单词,并计算文档得分。有些字段需要通配符,有些字段需要增强,如ImportantField^2、SomeField*、SomeOtherField^0.75 以上所有点都由AND
问题内容: 我有一个名为“ acts”的表,该表具有3个被索引在一起的列: 在表格中,一行有一个名为“红色暴动”的行为 当我执行以下搜索时,结果中会出现红色暴动: 但是,如果我对此进行扩展并搜索,则不会返回任何结果: 这是为什么?有没有更好的方法在查询中使用通配符? 我尝试更改为,但这在任一查询上均未返回任何结果。 问题答案: 值“ re”是MATCH()搜索的停用词。 http://dev.my
问题内容: 不知道如何为我的问题加上标题…大声笑。 以下是我需要的。 我的数据库中的值如下所示:test_example-1,test_example-2,test_example-TD-1 这些值的长度可以不同,“ test_example-”仅是示例,某些值的名称也有所不同。 当我执行查询以获取所有看起来像“ test_example-”的值时,我得到了所有信息,因为我以这种方式使用通配符“
是否有可能在我的Firebase查询中插入通配符? 例如。
我有2个查询相关Java泛型 1)我对java泛型很陌生。我正在尝试转换通配符,如下所示: 我想从列表中找出对象的类型 2)我有以下方法: 那为什么我在试图调用复制(整数,浮点数)的时候会出现编译错误呢?这里怎么了?