【问题标题】:How to search a field containing [ and/or ] in it in SOLR?如何在 SOLR 中搜索包含 [ 和/或 ] 的字段?
【发布时间】:2018-06-05 09:20:55
【问题描述】:

我有 SOLR 设置。

我想搜索所有包含[] 的文档。

我试过了

nk_title:"\["

但它会返回我数据库中的所有文档。

试过了

nk_title:[*

但它给了

  "error": {
    "msg": "org.apache.solr.search.SyntaxError: Cannot parse 'nk_source:156 AND nk_title:[*': Encountered \"<EOF>\" at line 1, column 29.\nWas expecting one of:\n    \"TO\" ...\n    <RANGE_QUOTED> ...\n    <RANGE_GOOP> ...\n    ",
    "code": 400
  }

我也试过

nk_title:\[*

nk_title:*[*

但返回空结果。

【问题讨论】:

  • nk_title 字段的定义是什么?如果字段类型正在剥离 [ 作为其分析和标记器链的一部分,您将根本无法生成匹配项。通配符(通常)仅适用于定义为string 的字段或带有KeywordTokenizer 的文本字段。
  • 定义?它的字符串类型
  • 您要搜索的内容是什么?
  • 搜索包含 [ 或 ] 的标题
  • 我明白了 - 您是否有尝试搜索的标题示例(必要时匿名)?

标签: apache solr


【解决方案1】:

要搜索[,只需确保在创建查询时使用\ 对其进行转义。给定一个集合,其中一个 title 字段定义为 string,包含三个文档:

{
    "id":"doc1",
    "title":"This is a title",
    "_version_":1602438086510247936
},
{
    "id":"doc2",
    "title":"[This is a title",
    "_version_":1602438093178142720
},
{
    "id":"doc3",
    "title":"This is [a title",
    "_version_":1602438101227012096
}

查询title:[* 得到doc2 作为命中:

 {"numFound":1,"start":0,"docs":[{
    "id":"doc2",
    "title":"[This is a title",
    "_version_":1602438093178142720}]}

双方的通配符都可以正常工作 (title:*\[*):

"response":{"numFound":2,"start":0,"docs":[
{
    "id":"doc2",
    "title":"[This is a title",
    "_version_":1602438093178142720},
  {
    "id":"doc3",
    "title":"This is [a title",
    "_version_":1602438101227012096}]
}}

【讨论】:

  • 那个通配符在这里不起作用......(我是 SOLR 的新手)看到我有这篇文章 imgur.com/a/UzJ6jxC 但是当我输入通配符 imgur.com/a/VVNcU9u 时它返回空结果
  • 真的确定您的字段类型是string吗?因为您看到的行为与定义为string 的字段不匹配。同样:如果字段类型正在剥离 [ 作为其分析和标记器链的一部分”。具有 StandardTokenizer 的文本字段会将文本拆分为 [(以及其他字符)上的标记,这意味着不会存储在字段的令牌中。
  • 如果您在那里看到第一个“字段类型”定义,您可以看到您有一个TextField 而不是StrField。默认标记器(如果您自己没有定义这些字段并且使用无模式模式)是 StandardTokenizer。标准标记器会将原始文本分解为标记,其中一个断点是 []。所以Foo [bar 将被存储为Foobar - 并且断点将被丢弃。使用通配符时,不会进行分析,并且由于没有匹配 [ 的标记 - 您不会得到任何结果。明确定义字段为string
  • 好的,正如我所说,我是 SOLR 的新手,所以请原谅我缺乏知识。您能否确认没有办法搜索 [] 保留现有架构?
  • 不是你定义的字段类型,没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多