首页 文章

关键字标记器与not_analyzed

提问于
浏览
0

使用 term 指定过滤器时,该字段是否始终为 not_analyzed ,还是可以使用 keyword 分析器?例如:

"must_not": [
          {
            "term": {
              "personid": "ABADF00D-BEEF-4218-B59B-A164017A3BA0"
            }
          },

如果我想查找该personid不区分大小写,我可能会使用带有小写过滤器的关键字tokenizer . 但这似乎导致它在用作 term 时不起作用 . 在这种情况下我应该坚持 not_analyzed 吗?

1 回答

  • 2

    将字段声明为 not_analyzed 等同于使用 keyword tokenizer而不使用任何其他过滤器(即没有 lowercase ) .

    如果您希望能够以不区分大小写的方式搜索该字段,但仍允许 term 查询,则有两个选项 .

    选项A:像现在一样使用 keyword tokenizer lowercase 令牌过滤器,但请确保 term 查询中的值小写,即

    "must_not": [
          {
            "term": {
              "personid": "abadf00d-beef-4218-b59b-a164017a3ba0"
            }
          },
    

    选项B:像现在一样使用 keyword tokenizer lowercase 标记过滤器(在下面命名为 your_analyzer ),但也添加一个声明为 not_analyzed 的子字段 raw . 所以你的映射基本上是这样的:

    {
      "personid": {
        "type": "string",
        "analyzer": "your_analyzer",
        "fields": {
          "raw": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }
    }
    

    然后你在 personid.raw 子字段上运行 term 查询,如果你想不区分大小写搜索,那么你就可以在 personid 字段上运行查询

    "must_not": [
          {
            "term": {
              "personid.raw": "ABADF00D-BEEF-4218-B59B-A164017A3BA0"
            }
          },
    

相关问题