ElasticSearch用单词内的连字符搜索

Sen*_*ini 5 search hyphen elasticsearch

我想寻求帮助。我想在标题和内容中搜索一个单词。这是结构

'body' => array(
  'mappings' => array(
    'myindex' => array(
      '_source' => array(
        'enabled' => true
      ),
      'properties' => array(
        'Title' => array(
          'type'  => 'string',
          'fields'=> array(
            'raw' => array(
               'type'  => 'string',
               'index' => 'not_analyzed'
              )
            )
          ),
          'Content' => array(
            'type'  => 'string'
          ),
          'Image' => array(
             type'      => 'string',
             'analyzer'  => 'standard'
         )
       )
     )
   )
 )
Run Code Online (Sandbox Code Playgroud)

查询字符串看起来像这样,在这里我想在“ 15-game”之类的文本中搜索“ 15-g”:

"query" : {
  "query_string": {
    "query": "*15-g*",
    "fields": [ "Title", "Content" ]
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我重复这个问题,请接受我的道歉,但我无法查明正在发生什么以及为什么它不返回任何结果。

我已经看过:

ElasticSearch-搜索连字符

ElasticSearch-搜索名称中的连字符

ElasticSearch-搜索名称中的连字符

但是我不能和我一起工作。

真正有趣的是,如果我搜索“ 15-g”(15个空格 - 空格 g),它将返回结果。

提前非常感谢您!

And*_*fan 4

.raw也向您添加一个字段Content并在字段上进行搜索.raw

{
  "query": {
    "query_string": {
      "query": "*15-g*",
      "fields": [
        "Title.raw",
        "Content.raw"
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

无论您要搜索的文本中有空格,并且您希望该空格与您的字段匹配,都需要对其进行转义(使用\)。另外,只要您有大写字母和通配符,并且您希望与.raw需要设置为 的字段lowercase_expanded_terms进行匹配false,因为默认情况下该设置是true并且它将小写搜索字符串(它将搜索laptop - black):

{
  "query": {
    "query_string": {
      "query": "*Laptop\\ -\\ Black*",
      "lowercase_expanded_terms": false, 
      "fields": [
        "Title.raw",
        "Content.raw"
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)