我想使用带有正则表达式的“ URI搜索”格式(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html#search-uri-request)查询Elasticsearch,但找不到如何处理正则表达式特殊字符符号(例如\ s和简单空格)的方法。
比方说,我在索引(使用关键字分析器)中存储了[苹果计算机]一词。 该术语将与:
一起找到curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*comp.*/&pretty
curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*appl.*/&pretty
curl -XGET http://es:9200/myindex/mytype/_search?q=name:/.*pple.*/&pretty
但是使用这些正则表达式查询时应该使用什么语法(在curl或其他工具中):
/.*pple\s+compu.*/
/.*le +compu.*/
答案 0 :(得分:0)
我想我已经找到了解决我的问题的方法:
首先,我的索引设置是这样的,我需要使用name.keyword进行全文搜索
{
"myindex" : {
"aliases" : { },
"mappings" : {
"mytype" : {
"properties" : {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
...
然后,使用“ URI搜索”格式进行查询,我必须使用Tipycal转换
空格应写为+
+应该写为%2b
网址中的任何其他特殊字符都应使用等效的%ASCII书写
所以原来我的正则表达式/.*le +compu.*/
必须这样查询:
curl -XGET "http://es:9200/myindex/mytype/_search?q=name.keyword:/.*pple+%2bcomp.*/&pretty"
最后,我在regexp文档或lucene中看不到\s
符号作为空间通配符的任何提及,但没什么大不了的,因为它可以使用regexp子模式重写。 / p>