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

带有空间的Elasticsearch正则表达式不起作用

黎玺
2023-03-14
问题内容

假设我有一本书的书名用 ElasticSearch 索引如下:

curl -XPUT "http://localhost:9200/_river/books/_meta" -d'
{
"type": "jdbc",
"jdbc": {
"driver": "org.postgresql.Driver",
"url": "jdbc:postgresql://localhost:5432/...",
"user": "...",
"password": "...",
"index": "books",
"type": "books",
"sql": "SELECT * FROM books"}

}’

例如,我有一本书叫"Afoo barb"

以下代码(搜索'.*foo.*')可以很好地返回书中:

client.search({
  index: 'books',
  'from': 0,
  'size': 10,
  'body' : {
    'query': {
      'filtered': {
         'filter': {
           'bool': {
              'must': {
                'regexp': { title: '.*foo.*' }
               }
            }
          }
        }
     }
  }
});

但是以下代码(搜索'.*foo bar.*')没有:

client.search({
  index: 'books',
  'from': 0,
  'size': 10,
  'body' : {
    'query': {
      'filtered': {
         'filter': {
           'bool': {
              'must': {
                'regexp': { title: '.*foo bar.*' }
               }
            }
          }
        }
     }
  }
});

我试图用'\s'或替换空格,'.*'但是它也不起作用。

我认为标题以(['Afoo', 'barb'])分隔,因此找不到'.*foo bar.*'

如何要求Elasticsearch在完整标题中搜索regexp?


问题答案:

Elasticsearch会将正则表达式应用于令牌生成器针对该字段生成的术语,而不应用于该字段的原始文本。

您可以使用其他令牌生成器为字段建立索引,也可以定义正则表达式,使其返回具有较高分数的必需文档。

关键字标记器的示例:

'regexp': { title: '*(foo bar)*' }


 类似资料:
  • 我在java中有以下正则表达式- 但这仍然匹配“”。 整个代码-

  • 我尝试用下面的正则表达式做一个简单的文件名匹配,我测试了从这个为示例文件名工作 当我在<code>find</code>的<code>-regex</code<标志中结合这一点时 该命令未标识路径中存在的文件(例如 )。我知道此中有许多现有的正则表达式类型,但我意识到我的类型是 的并尝试如下, 仍然没有结果。我搜索了一些类似的此类问题,但它们涉及给出错误的正则表达式,导致找不到文件。就我而言,尽管

  • 问题内容: 我有一个正则表达式: 这应该与该字符串匹配并返回三个捕获(根据Rubular) 这是我的代码: 当有三个时,此打印输出1(组),所以我只能这样做,只会返回32。 问题答案: 调用查找匹配的 下一个 实例,如果没有更多实例,则返回false。尝试调用它三次,看看是否有所有预期的组。 为了澄清,正在尝试 在正则表达式中 找到第一个组 表达式 。您的正则表达式中只有一个这样的组表达式,因此永

  • 问题内容: 我和我的朋友正在尝试创建一种算法来计算输入的数字之后不会重复的数字(例如)。 感兴趣的代码是: 由于某种原因,即使将其设置为,也将其设置为。每个输出的结果将与输入具有相同的值。 这是什么问题,我们将如何更改逻辑,以便当数字中的数字重复时,检查器返回假? 问题答案: 考虑这些行 有一些问题。我认为您缺少牙套。和你忘了更新checker的时候matcher.find()是假的。我建议你改为

  • 我要匹配以下字符串: 包含unicode空格(不要问我为什么)<代码>/,\s*,/u在regex101中工作正常。 但是(?u),\s*,“在clojure中不起作用: 为什么会失败?

  • 我有一个表单,它有一个输入字段,只要求一个有效的youtube url,没有逗号分隔的youtube url。我使用以下正则表达式验证youtube url的用户输入: 但如果用户输入逗号分隔的有效youtube链接,这些正则表达式就会失败。 我想要一个正则表达式,simpy只允许在输入字段中有一个有效的youtube链接。有人能在这方面帮我吗,因为我对regex还不熟悉? 例如: https:/