小编典典

ElasticSearch用单词内的连字符搜索

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'
         )
       )
     )
   )
 )

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

"query" : {
  "query_string": {
    "query": "*15-g*",
    "fields": [ "Title", "Content" ]
  }
}

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

但是我无法与我合作。

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

提前非常感谢您!


阅读 341

收藏
2020-06-22

共1个答案

小编典典

.raw向您添加一个字段,Content然后在这些.raw字段上进行搜索:

{
  "query": {
    "query_string": {
      "query": "*15-g*",
      "fields": [
        "Title.raw",
        "Content.raw"
      ]
    }
  }
}

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

{
  "query": {
    "query_string": {
      "query": "*Laptop\\ -\\ Black*",
      "lowercase_expanded_terms": false, 
      "fields": [
        "Title.raw",
        "Content.raw"
      ]
    }
  }
}
2020-06-22