当前位置: 首页 > 面试题库 >

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

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

但是我无法与我合作。

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

提前非常感谢您!


问题答案:

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


 类似资料:
  • 我想请你帮忙。我想搜索一个词里面的标题和内容。下面是结构 查询字符串如下所示,我希望在类似“15-game”的文本中搜索“15-g”: 请接受我的道歉,如果我重复的问题,但我无法找到发生了什么,为什么它没有返回任何结果。 我已经看过了: 提前谢谢你!

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

  • 问题内容: 因此,这是我编写的用于查找单词内回文的代码(以检查单词内是否包括单词本身在内的回文)条件:字符之间的空格已被计算并且不被忽略示例:A但大号是回文,但从技术上讲是应有的现在所涉及的空间不是。这就是标准。 基于上面的内容,以下代码通常应该起作用。您可以自己尝试不同的测试,以检查此代码是否提供任何错误。 这是已废止的版本。我的意思是,我试图从中间开始,并从头开始进行迭代,并通过检查字符是否相

  • 问题内容: 我正在发送此请求 我得到正确的结果 但是当我想按单词部分搜索时,例如 我没有得到任何结果: 我究竟做错了什么? 问题答案: 这是因为您的字段可能已由标准分析器(默认设置)进行了分析,并且标题已被标记为三个标记,并且。 为了搜索单词的任何子串,您需要创建一个自定义分析器,该分析器利用ngram令牌过滤器来索引每个令牌的所有子串。 您可以这样创建索引: 然后,您可以重新索引数据。这将使标题

  • 问题内容: 我有一个产品目录,正在使用Elastica客户端在ElasticSearch中建立索引。我是ElasticSearch BTW的新手。 我的目录中有一些名称相同的产品。但是,如果输入,它们将不会出现在搜索结果中。 我该怎么办才能弹出结果? 我已经按照本教程进行了学习,并为索引实现了以下内容: 问题答案: 您可以尝试使用映射字符过滤器删除连字符: http://www.elasticse

  • 问题内容: 我曾经使用过django,haystack和elasticsearch。 我的search_index.py: 搜索表格: 模板: 看 ` 我得到所有的价值,那里有“老板”和“挡泥板” 当您在搜索框中输入“ boss fender”时,我没有结果。从搜索表单中,我只能得到一个单词的结果,例如“老板”。如何使搜索多个单词的能力? 问题答案: 这个月我陷入了这个问题。 为了执行正确的查询,