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

小面用空格标记标记。有解决办法吗?

景景胜
2023-03-14

我在facets上有一些问题,用空格标记标签。

我有以下映射:


    curl -XPOST "http://localhost:9200/pictures" -d '
    {
      "mappings" : {
        "pictures" : {
                "properties" : {
                    "id": { "type": "string" },
                    "description": {"type": "string", "index": "not_analyzed"},
                    "featured": { "type": "boolean" },
                    "categories": { "type": "string", "index": "not_analyzed" },
                    "tags": { "type": "string", "index": "not_analyzed", "analyzer": "keyword" },
                    "created_at": { "type": "double" }
                }
            }
        }
    }'


    curl -X POST "http://localhost:9200/pictures/picture" -d '{
      "picture": {
        "id": "4defe0ecf02a8724b8000047",
        "title": "Victoria Secret PhotoShoot",
        "description": "From France and Italy",
        "featured": true,
        "categories": [
          "Fashion",
          "Girls",
        ],
        "tags": [
          "girl",
          "photoshoot",
          "supermodel",
          "Victoria Secret"
        ],
        "created_at": 1405784416.04672
      }
    }'

我的问题是:


    curl -X POST "http://localhost:9200/pictures/_search?pretty=true" -d '
    {
      "query": {
        "text": {
          "tags": {
            "query": "Victoria Secret"
          }
        }
      },
      "facets": {
        "tags": {
          "terms": {
            "field": "tags"
          }
        }
      }
    }'

输出结果为:


    {
      "took" : 1,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      },
      "hits" : {
        "total" : 0,
        "max_score" : null,
        "hits" : [ ]
      },
      "facets" : {
        "tags" : {
          "_type" : "terms",
          "missing" : 0,
          "total" : 0,
          "other" : 0,
          "terms" : [ ]
        }
      }
    }

现在,我在facets中得到了total 0,在hits中得到了total:0
知道为什么它不能工作吗?
我知道,当我从标记中删除关键字分析器并使其为“not_analysis”时,我会得到结果。
但是仍然存在区分大小写的问题。
如果通过删除关键字分析器来运行上述相同的查询,则得到的结果是:


    facets: {
        tags: {
            _type: terms
            missing: 0
            total: 12
            other: 0
            terms: [
                {
                    term: photoshoot
                    count: 1
                }
                {
                    term: girl
                    count: 1
                }
                {
                    term: Victoria Secret
                    count: 1
                }
                {
                    term: supermodel
                    count: 1
                }         
            ]
        }

    }


这里的Victoria Secret在“not_analysis”中区分大小写,但它在计数中占用空间,但当我用小写作为“Victoria Secret”查询时,它不会给出任何结果。


有什么建议吗??

谢谢,
Suraj

共有1个答案

羊舌富
2023-03-14

第一个例子对我来说并不完全清楚。如果您使用KeywordAnalyzer,这意味着该字段将按原样进行索引,但是完全不分析该字段更有意义,这是一样的。您发布的映射包含两个

"index": "not_analyzed", "analyzer": "keyword"

这没什么意义。如果您不分析字段,为什么要为它选择分析器?

当然,除此之外,如果不分析字段,标记Victoria Secret将按原样索引,因此查询Victoria Secret将不匹配。如果您希望它不区分大小写,您需要定义一个使用KeyworkTokenizer的自定义分析器,因为您不希望标记它和LowerCaseTokenFilter。可以通过索引设置分析部分定义自定义分析器,然后在映射中使用它。但是这样,面总是小写的,我想这是你不喜欢的。这就是为什么最好定义一个多字段,并使用两种不同的文本分析对字段进行索引,一种用于方面,另一种用于搜索。

您可以像这样创建索引:

curl -XPOST "http://localhost:9200/pictures" -d '{
    "settings" : {
        "analysis" : {
            "analyzer" : {
              "lowercase_analyzer" : {
                "type" : "custom",
                "tokenizer" : "keyword",
                "filter" : [ "lowercase"]
              }
            }
        }
    },
    "mappings" : {
        "pictures" : {
            "properties" : {
                "id": { "type": "string" },
                "description": {"type": "string", "index": "not_analyzed"},
                "featured": { "type": "boolean" },
                "categories": { "type": "string", "index": "not_analyzed" },
                "tags" : {
                    "type" : "multi_field",
                    "fields" : {
                        "tags": { "type": "string", "analyzer": "lowercase_analyzer" },
                        "facet": {"type": "string", "index": "not_analyzed"},
                    }
                },
                "created_at": { "type": "double" }
            }
        }
    }
}'

然后,当您在该字段上搜索时,自定义lowercase_analyzer也将默认应用于文本查询,以便您可以搜索Victoria SecretVictoria Secret返回结果。您需要更改facet部分,并在新的tags.facet字段上创建facet,该字段不进行分析。

此外,您可能希望查看匹配查询,因为在最新的elasticsearch版本(0.19.9)中不推荐使用文本查询。

 类似资料:
  • 本文向大家介绍忘记Mysql密码的解决办法小结,包括了忘记Mysql密码的解决办法小结的使用技巧和注意事项,需要的朋友参考一下 方法1: 用SET PASSWORD命令 方法2:用mysqladmin 如果root已经设置过密码,采用如下方法 方法3: 用UPDATE直接编辑user表 在丢失root密码的时候,可以这样 希望对大家有所帮助。

  • 我实际上正在用Java开发一个文本解析器,有人要求我通过用它解析HTML来增强它。解析器的目的是将被解析的文件分成另外三个文件,一个包含文件中包含的所有单词,一个包括所有句子,另一个包含所有问题。 *.txt部分工作得很好,但我在解析HTML时遇到了一个问题。 我创建了一个扩展名为*.txt的临时文件,并将其在我的文本解析器中传递,但是如果我传递一个带有HTML文件链接的URL,其格式如下所示:

  • 问题内容: 当使用Python的etree创建XML文件时,如果使用将空标签写入文件,则会得到: 不幸的是,即使它是正确的标签,我们在Fortran中使用的XML解析器库也无法处理此问题。它需要看到: 有没有一种方法可以更改格式化规则或etree中的某些方法来完成这项工作? 问题答案: 从Python 3.4开始,您可以在函数和方法中使用参数: 在较旧的Python版本(2.7到3.3)中,作为一

  • 感谢这里关于堆栈溢出的答案和一些小时的工作;),我的语法终于如期发挥作用了。只是一些小问题或混乱的情况。 以下是我对lexer的定义: 下面是解析器的定义: 看起来lexer文件开头的成员定义在带有ANTLR4插件的IntelliJ IDEA中不起作用?还是我在定义中遗漏了什么。 在标题的定义中,我试图允许开始空白。但是无论我尝试什么,解析过程都失败了。我添加了一个WS标记[\t],但是当我将WS

  • 问题内容: 尝试在基于SVG的可视化中使用SVG标记元素时遇到问题。我正在将更改添加到Web应用程序中,该更改恰好在每个页面上都包含一个基本标记,以便对CSS文件,javascript文件等的任何引用都可以是相对的。 我下面有一些示例代码可以重现该问题。有一个线元素和一个标记元素定义。该标记元素由其’marker- end’属性中的行通过uri和标记id引用。没有基本标签,箭头显示正常。使用基本标

  • 您可以在当前光标处作一个标记,以便快速返回 m标记名称 定义标记。标记名称为一个字符 `标记名称 返回标记 mx 将当前光标处定义为标记 x `x 返回标记 x :marks 查看标记列表