如何在Solr 4中使用正则表达式进行查询

cga*_*rdo 5 regex solr

我已经到了绝望的地步,所以我正在寻求帮助.我正在尝试使用正则表达式查询Solr 4引擎的结果.

让我们假设我要查询的文档是:

<str name="text">description: best company; name: roca mola</str>
Run Code Online (Sandbox Code Playgroud)

我想使用这个正则表达式进行查询:

description:(.*)?company(.*)?;
Run Code Online (Sandbox Code Playgroud)

我在一些论坛中读到在Solr 4中使用正则表达式就像添加斜杠一样简单,例如:

localhost:8080/solr/q=text:/description\:(.*)?company(.*)?;/
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这个也不起作用:

localhost:8080/solr/q=text:/description(.*)?company(.*)?;/
Run Code Online (Sandbox Code Playgroud)

我不想要一个简单的查询:

localhost:8080/solr/q=text:*company*
Run Code Online (Sandbox Code Playgroud)

因为这会使文档不匹配,例如:

<str name="text">description: my home; name: mother company"</str>
Run Code Online (Sandbox Code Playgroud)

如果我不清楚请告诉我.

来自智利的干杯:D

注意:我text_general在我的计划中使用字段.正如@arun指出的那样,string字段可以处理我正在使用的正则表达式.

aru*_*run 8

不要在text字段类型上尝试正则表达式搜索,而是在字段类型上尝试string,因为正则表达式跨越多个单词.(如果你的正则表达式需要匹配一个单词,那么你可以使用一个text字段.)

也要对特殊字符进行百分比编码,以确保它们不是导致不匹配的原因.

q=strfield:/description%3A(.*?)company(.*?)%3B.*/
Run Code Online (Sandbox Code Playgroud)

更新: 刚刚在字符串字段上尝试过.以上正则表达式有效.即使没有编码百分比,它也可以工作

q=strfield:/description:.*?company.*?;.*/
Run Code Online (Sandbox Code Playgroud)

  • 我知道了。我正在使用 text_general 字段,这可能是我的正则表达式查询不起作用的原因。 (3认同)
  • 我还写了一篇关于Solr正则表达式搜索的帖子:http://1opensourcelover.wordpress.com/2013/09/29/solr-regex-tutorial/ (2认同)
  • 你能举个例子吗? (2认同)