2017-04-18 138 views
0

我要搜索的字符串包含字段的字符串。像在SQL中一样搜索 我试图使用正则表达式进行搜索。搜索不区分大小写

$params["query"]["bool"]["filter"][]["regexp"][$item_key] = '.*'.$search_pattern.'.*' 

我只能搜索低位字。对于上面的单词,它不起作用。 例子:

我的标题是:ABC

如果搜索文本是:ABC - >已导致

如果搜索文本是:ABC - >没有结果

我的映射配置为:

`'mappings' => [ 
     'items' => [ 
      "title" => [ 
       "type" => "text", 
       "fields" => [ 
        "keyword" => [ 
         "type" => "keyword", 
        ] 
       ], 
       "fielddata" => true, 
       "index" => "not_analyzed", 
      ] 
     ] 
    ]` 

是否有人在的情况下,搜索不区分大小写的任何想法? 非常感谢。

回答

0

您正在使用布尔过滤器内的前缀查询。 Elasticsearch不分析过滤器的查询。您可以将您的regex移动到查询上下文,查询条件将由索引分析器进行分析。为了确保术语相同,索引和搜索弹性在搜索时加入同一个分析器。

您可以将standard分析

{ 
    "mappings": { 
     "items": { 
      "properties": { 
       "title": { 
        "type": "text", 
        "fields": { 
         "keyword": { 
          "type": "keyword" 
         } 
        }, 
        "fielddata": true, 
        "analyzer": "standard" 
       } 
      } 
     } 
    } 
} 

查询

{ 
    "query": { 
     "regexp":{ 
      "title": "ab.*" 
     } 
    } 
} 

希望这有助于

+0

我试着像你说的改变映射配置。但我得到这个错误: { “错误”:{ “ROOT_CAUSE”:对[标题]与其他类型的现有米 apping冲突“映射::[{ ”类型“: ”illegal_argument_exception“, ”理“ \ n [映射器[标题]具有不同[分析器]]“}],”类型“:” illegal_argument_exception“‘理由’:” 映射为[标题]与其他类型的现有映射冲突:\ N [映射器[标题]具有不同[分析器]] “},” ST 的ATU“:400} – ToujouAya

+0

像上面我所说。我想在SQL中使用一些与**类似的功能。在现场 说样本数据:神经南丁格尔qrBGHaSdMe 搜索 标题:Neeraj - 没有结果 标题:neeraj - 获取引起 标题:东北 - 获得结果 标题:eraj - 获取引起 – ToujouAya

+0

的errror是想说你应聘这些映射在同一个索引上,为什么不创建一个新的索引。 – user3775217