代码之家  ›  专栏  ›  技术社区  ›  Henrique Ferreira

如何构建匹配具有特殊字符的文本的Elasticsearch短语查询?

  •  0
  • Henrique Ferreira  · 技术社区  · 7 年前

    page content . 在该字段中,可以包含文本的一部分,例如

    “哦,卡罗,乔·普雷托。” (在葡萄牙语中表示周的车是黑色的)

    O carro do joao e preto

    并且仍然能够得到合适的匹配。

    到目前为止,我尝试了:

    1. here

      GET _search
      {
          "query": {
                  "match_phrase": {
                      "page content": 
                      {
                          "query": "o carro do joao e preto"
                      }
                  }
          }
       }
      

    这个查询的结果给了我0次点击。这是完全可以接受的,因为提供的查询内容与该文档中存储的内容不同。

    1. 我已尝试设置ASCII折叠令牌过滤器( here )但我不知道怎么用。我基本上是用这个查询创建一个新索引:

      PUT /newindex '
      {
          "page content": "O carro do João é preto",
          "settings" : {
              "analysis" : {
                  "analyzer" : {
                      "default" : {
                          "tokenizer" : "standard",
                          "filter" : ["standard", "my_ascii_folding"]
                      }
                  },
                  "filter" : {
                      "my_ascii_folding" : {
                          "type" : "asciifolding",
                          "preserve_original" : true
                      }
                  }
              }
          }
      }'
      

    O carro do joao e preto

    它应该显示我想要的正确结果。但问题是它对我不起作用。我忘了什么吗?在过去的两天里,我一直在做这件事,但都没有成功,我觉得这是我错过的东西。

    所以问题是:

    1 回复  |  直到 7 年前
        1
  •  0
  •   Henrique Ferreira    7 年前

    设法找到了我自己问题的答案。在创建索引时,我不得不稍微更改一下分析器。更多详细信息 previous answer :

    {
        "settings" : {
            "analysis" : {
                "analyzer" : {
                    "default" : {
                        "tokenizer" : "standard",
                        "filter" : ["standard", "lowercase", "asciifolding"]
                    },
                    "text" : {
                        "tokenizer" : "standard",
                        "filter" : ["standard", "lowercase"],
                        "char_filter" : "html_strip"
                    },
                    "sortable" : {
                        "tokenizer" : "keyword",
                        "filter" : ["lowercase"],
                        "char_filter" : "html_strip"
                    }
                }
            }
        }
    }