Solr 的 Lucene 查询中的禁用字符列表
List of forbidden character in Lucene query for Solr
我在 Riak 数据库上安装了 Solr 搜索引擎。
当我尝试使用以下查询实现搜索时:
my_field:#
我是来自 Solr
的配对查询错误
我也试过如下查询
my_field:"#"
编辑:
我终于找到了 #
字符的解决方案。 (通过使用 URI 代码对其进行编码 %23
)。
Solr 的Lucene 查询中是否有完整的禁用字符列表?
#
的问题在于它在 urls 中具有特殊含义 。所以你的浏览器根本不会将它发送到 Solr 服务器。 #
表示一个本地锚点,它之后的任何内容都不会发送到服务器。
因此,如果您有一个 HTTP 查询字符串,例如 ?q=field:#<whatever>
,Solr 将从您的浏览器接收的唯一内容是 ?q=field:
。这不是一个有效的查询。
这与必须转义哪些字符无关在 Solr(或 Lucene)的查询语法中。
你的问题不是“#”是 Solr 查询中的禁止字符,而是你运行查询的方式——使用浏览器,可能来自 Riak 的内置 Solr 控制台。
此字符在 URL 中发送时需要编码(参见 Percent-encoding in a URI, RFC 3986)。在这种情况下,您的解决方案是正确的。完整列表是:
! # $ & ' ( ) * + , / : ; = ? @ [ ]
但是,根据最新的 Solr Ref Guide Escaping Special Characters,在 Solr 查询中并不禁止:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : /
以编程方式发送查询时不应该出现此问题。
我在 Riak 数据库上安装了 Solr 搜索引擎。 当我尝试使用以下查询实现搜索时:
my_field:#
我是来自 Solr
的配对查询错误我也试过如下查询
my_field:"#"
编辑:
我终于找到了 #
字符的解决方案。 (通过使用 URI 代码对其进行编码 %23
)。
Solr 的Lucene 查询中是否有完整的禁用字符列表?
#
的问题在于它在 urls 中具有特殊含义 。所以你的浏览器根本不会将它发送到 Solr 服务器。 #
表示一个本地锚点,它之后的任何内容都不会发送到服务器。
因此,如果您有一个 HTTP 查询字符串,例如 ?q=field:#<whatever>
,Solr 将从您的浏览器接收的唯一内容是 ?q=field:
。这不是一个有效的查询。
这与必须转义哪些字符无关在 Solr(或 Lucene)的查询语法中。
你的问题不是“#”是 Solr 查询中的禁止字符,而是你运行查询的方式——使用浏览器,可能来自 Riak 的内置 Solr 控制台。
此字符在 URL 中发送时需要编码(参见 Percent-encoding in a URI, RFC 3986)。在这种情况下,您的解决方案是正确的。完整列表是:
! # $ & ' ( ) * + , / : ; = ? @ [ ]
但是,根据最新的 Solr Ref Guide Escaping Special Characters,在 Solr 查询中并不禁止:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : /
以编程方式发送查询时不应该出现此问题。