带有空格的Elasticsearch通配符查询

六道仙人

我正在尝试使用空格进行通配符查询。它很容易根据术语而不是根据字段匹配单词。

我已经阅读了说明我需要将该字段设置为not_analyzed的文档,但是设置了此类型后,该字段不返回任何内容。

这是基于术语的映射:

{
  "denshop" : {
    "mappings" : {
      "products" : {
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "id" : {
            "type" : "long"
          },
          "name" : {
            "type" : "string"
          },
          "price" : {
            "type" : "long"
          },
          "url" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

这是完全相同的查询不返回任何内容的映射:

{
  "denshop" : {
    "mappings" : {
      "products" : {
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "id" : {
            "type" : "long"
          },
          "name" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "price" : {
            "type" : "long"
          },
          "url" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

查询在这里:

curl -XPOST http://127.0.0.1:9200/denshop/products/_search?pretty -d '{"query":{"wildcard":{"name":"*test*"}}}'

not_analyzed属性的响应

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

没有not_analyzed的响应:

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 5,
    "max_score" : 1.0,
    "hits" : [ {
    ...

编辑:添加请求的信息

这是文件清单:

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 5,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "denshop",
      "_type" : "products",
      "_id" : "3L1",
      "_score" : 1.0,
      "_source" : {
        "id" : 3,
        "name" : "Testovací produkt 2",
        "code" : "",
        "price" : 500,
        "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt-2/"
      }
    }, {
      "_index" : "denshop",
      "_type" : "products",
      "_id" : "4L1",
      "_score" : 1.0,
      "_source" : {
        "id" : 4,
        "name" : "Testovací produkt 3",
        "code" : "",
        "price" : 666,
        "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt-3/"
      }
    }, {
      "_index" : "denshop",
      "_type" : "products",
      "_id" : "2L1",
      "_score" : 1.0,
      "_source" : {
        "id" : 2,
        "name" : "Testovací produkt",
        "code" : "",
        "price" : 500,
        "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt/"
      }
    }, {
      "_index" : "denshop",
      "_type" : "products",
      "_id" : "5L1",
      "_score" : 1.0,
      "_source" : {
        "id" : 5,
        "name" : "Testovací produkt 4",
        "code" : "",
        "price" : 666,
        "url" : "http://www.denshop.lh/damske-obleceni/testovaci-produkt-4/"
      }
    }, {
      "_index" : "denshop",
      "_type" : "products",
      "_id" : "6L1",
      "_score" : 1.0,
      "_source" : {
        "id" : 6,
        "name" : "Testovací produkt 5",
        "code" : "",
        "price" : 666,
        "url" : "http://www.denshop.lh/tricka-tilka-tuniky/testovaci-produkt-5/"
      }
    } ]
  }
}

如果没有not_analyzed它,则返回:

curl -XPOST http://127.0.0.1:9200/denshop/products/_search?pretty -d '{"query":{"wildcard":{"name":"*testovací*"}}}'

但是不可以(请注意星号前的空格):

curl -XPOST http://127.0.0.1:9200/denshop/products/_search?pretty -d '{"query":{"wildcard":{"name":"*testovací *"}}}'

当我将not_analyzedto添加到映射时,无论我在通配符查询中输入什么内容,它都不会返回任何匹配。

安德烈·斯特凡(Andrei Stefan)

添加一个自定义分析器,该文本应小写。然后,在您的搜索查询中,在将文本传递给它之前,请先在客户端应用程序中将其小写

同样,为了保留原始分析链,我在您的name字段中添加了一个子字段,该子字段将使用自定义分析器。

PUT /denshop
{
  "settings": {
    "analysis": {
      "analyzer": {
        "keyword_lowercase": {
          "type": "custom",
          "tokenizer": "keyword",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "products": {
      "properties": {
        "name": {
          "type": "string",
          "fields": {
            "lowercase": {
              "type": "string",
              "analyzer": "keyword_lowercase"
            }
          }
        }
      }
    }
  }
}

该查询将在子字段上工作:

GET /denshop/products/_search
{
  "query": {
    "wildcard": {
      "name.lowercase": "*testovací *"
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有空格的Elasticsearch Nest通配符查询

来自分类Dev

带有空格和通配符的Google Directory Service查询:行为与预期不符

来自分类Dev

带有空格的列上的 CQL 查询

来自分类Dev

如何从Coldfusion查询中读取带有空格的列?

来自分类Dev

对带有空格的文件名使用makefile通配符命令

来自分类Dev

Elasticsearch:查找带有和不带有空格的值

来自分类Dev

如果搜索查询没有空格,则正则表达式匹配带有空格的字符串

来自分类Dev

Git别名的参数带有空格

来自分类Dev

带有空格的lex扩展失败

来自分类Dev

带有空格的类属性

来自分类Dev

导航列表,内联并带有空格

来自分类Dev

Git别名的参数带有空格

来自分类Dev

名称中带有空格的文件

来自分类Dev

带有空格的CSS类

来自分类Dev

JPA 检索带有空格的枚举

来自分类Dev

删除带有空格或“-”的单词 Python

来自分类Dev

在DataFrame中使用带有空格的列名称进行查询

来自分类Dev

如何使用AWS S3 SQL语法查询带有空格的列名称?

来自分类Dev

在DataFrame中使用带有空格的列名称进行查询

来自分类Dev

带有@符号和通配符的Elasticsearch查询字符串查询

来自分类Dev

SQL选择查询,其中列像字符串一样,带有和不带有空格

来自分类Dev

字段名称中带有通配符的 Elasticsearch 范围查询

来自分类Dev

AWS中ElasticSearch通配符查询和空格的问题

来自分类Dev

猫鼬查询带有通配符的子句

来自分类Dev

rsync如何排除所有带有空格的数组?

来自分类Dev

如何在名称中带有空格的scp目录

来自分类Dev

实体框架的Where语句末尾带有空格

来自分类Dev

Django URL基于带有空格的charfield?

来自分类Dev

Bash if语句在变量中带有空格

Related 相关文章

热门标签

归档