elasticsearch,whitespace,Javascript,Regex,elasticsearch,Whitespace" /> elasticsearch,whitespace,Javascript,Regex,elasticsearch,Whitespace" />

Javascript 空间不起作用的Elasticsearch regexp

Javascript 空间不起作用的Elasticsearch regexp,javascript,regex,elasticsearch,whitespace,Javascript,Regex,elasticsearch,Whitespace,让我们假设我有一些书的标题通过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": "b

让我们假设我有一些书的标题通过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"}
}"

例如,我有一本书叫《阿福倒钩》

以下代码(搜索
'.*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应用于标记器为该字段生成的术语,而不是字段的原始文本

您可以使用不同的方法为字段编制索引,或者定义正则表达式,使其以高分返回所需文档

关键字标记器示例:

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

'.*(foo | bar)。*'
不起作用,因为它在
.*foo.*'
.*bar.*'
的结果之间进行联合。我更想要一个交叉点,因为我不想要标题
'Foo baz'
…我应该使用什么标记器来搜索整个原始文本?@pidupuis您可以用于您的目的..谢谢,但我没有使用它。。。根据我在论坛上读到的内容,我试图在放置索引时将其添加为设置,或直接将其用作
query_string
中的参数,但它不起作用,而且我没有找到任何明确的文档…@pidupuis你读过吗?