当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch在单词中使用连字符进行搜索

子车睿
2023-03-14

我想请你帮忙。我想搜索一个词里面的标题和内容。下面是结构

'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" ]
  }
}

请接受我的道歉,如果我重复的问题,但我无法找到发生了什么,为什么它没有返回任何结果。

我已经看过了:

提前谢谢你!

共有1个答案

须敏学
2023-03-14

还将.raw字段添加到内容中,并在.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"
      ]
    }
  }
}
 类似资料:
  • 问题内容: 我想寻求帮助。我想在标题和内容中搜索一个单词。这是结构 查询字符串看起来像这样,在这里我想在“ 15-game”之类的文本中搜索“ 15-g”: 如果我重复这个问题,请接受我的道歉,但我无法查明发生了什么,以及为什么它不返回任何结果。 但是我无法与我合作。 真正有趣的是,如果我搜索“ 15-g”(15个 空格 - 空格 g),它将返回结果。 提前非常感谢您! 问题答案: 也向您添加一个

  • 我遵循了本教程,并为索引实现了以下内容:

  • 问题内容: 弹性搜寻1.6 我想索引包含连字符的文本,例如U-12,U-17,WU-12,T恤…,并能够使用“简单查询字符串”查询来搜索它们。 数据样本(简体): 所以我去了这个映射: 使用以下查询进行搜索: 什么有效: “ U-12”,“ U ”,“ t ”,“ ts *” 什么不起作用: “ U-”,“ u-1 ”,“ t-”,“ t-sh ”,… 看来char过滤器未在搜索字符串上执行?我该

  • 问题内容: 我想以查询其他字段的相同方式将多值字段的值查询为单独的“字段”。我有这样的数据结构: 我的查询如下所示: 仅当值包含我的整个查询时,“类型”和“运算符”才能完美匹配单个值字段。例如,查询“ foo two”不会返回匹配项。 我希望标签字段的行为相同。现在,查询“东西”将在不应该返回匹配项时返回匹配项,因为没有字段或标记值将两个单词都包含在一个值中。有没有办法做到这一点? 编辑 Val的

  • 问题内容: 数据库:Sql Server 我有名为page_text的表列,其中包含以下值 “我喜欢stackoverflow.com,因为我可以随时发布问题并获得答案。” 我想使用 SQLQUERY 搜索 它的数量。因此,在该字符串中它将返回4。 我应该可以搜索任何东西。 问题答案:

  • 问题内容: 我无法在Elasticsearch中以特殊字符结尾/开头的字符进行搜索。就像“ 123456!” 我的映射是 它给我错误,我可以在搜索查询(或映射)中做什么,以便特殊字符将被视为搜索字符串的一部分? 问题答案: 由于您的字段是(好!),请尝试用双引号引起来进行完全匹配: 这样做的另一种方法是在查询中设置分析器(但请务必转义,因为它是保留字符(对于操作员)