【问题标题】:Allowing case-insensitive search with snowball_analyzer in Elasticsearch在 Elasticsearch 中允许使用 snowball_analyzer 进行不区分大小写的搜索
【发布时间】:2015-07-22 10:27:04
【问题描述】:

首先,我对 ES 完全陌生。我在下面创建了 ES 搜索条件来搜索可以正常工作的项目,但我现在需要的是,我想将 ma​​ke 字段变为不区分大小写,以便hello 的搜索结果相同, HeLloHELLO 等等。

由于我的知识非常有限,我已阅读下面的帖子无法安静地适用于下面的示例:

ma​​ke 中删除 not_analyzed 没有帮助。

'indexes' => [
    'my_project' => [
        'client' => 'default',
        'index_name' => 'hello',
        'settings' => [
            'index' => [
                'analysis' => [
                    'analyzer' => [
                        'snowball_analyzer' => [
                            'type' => 'snowball',
                            'language' => 'English',
                        ],
                    ],
                ],
            ],
        ],
        'types' => [
            'item' => [
                'mappings' => [
                    'uuid' => ['type' => 'string', 'index' => 'not_analyzed'],
                    'name' => ['type' => 'string', 'boost' => 8, 'analyzer' => 'snowball_analyzer'],
                    'make' => ['type' => 'string', 'index' => 'not_analyzed'],
                ]
            ],
        ],
    ],
],

这些是我创建的查询:

1

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "make": "HeLlo"
              }
            }
          ]
        }
      }
    }
  }
}

【问题讨论】:

  • 帖子中没有搜索条件。搜索不区分大小写与映射和/或搜索本身有关。

标签: php symfony elasticsearch foselasticabundle


【解决方案1】:

您必须添加“小写”过滤器。这是我使用的类似配置的摘录:

settings:
    index:
        analysis:
            analyzer:
                custom_search_analyzer:
                    type: custom
                    tokenizer: standard
                    filter: [stopwords, asciifolding ,lowercase, snowball, elision, worddelimiter]

在你的情况下,我猜你应该这样改变:

...                    
'settings' => [
    'index' => [
        'analysis' => [
            'analyzer' => [
                'snowball_analyzer' => [
                    'type' => 'snowball',
                    'language' => 'English',
                    'filter' => [ 'lowercase' ]
                ],
            ],
        ],
    ],
],                        
...

【讨论】:

  • 我刚刚添加了'filter' => [ 'lowercase' ] 位但没有运气。
  • 我刚刚读到应该在雪球中默认启用小写过滤器,请参阅elastic.co/guide/en/elasticsearch/reference/current/…。所以不幸的是我的回答不适用。很抱歉误导了你。
  • 完全没问题。那个会发生。无论如何,感谢您的努力。
【解决方案2】:

这次我睁着眼睛通过the first link I posted 中的答案,它也解决了我的问题,所以我不区分大小写的工作示例是:

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            {
               "query_string": {
                  "query": "HeLlo*"
                }
            }
          ]
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2019-03-15
    • 2012-12-20
    • 2010-09-12
    相关资源
    最近更新 更多