Solr通配符语法仅在搜索到的文本末尾有效吗?

时间:2019-03-07 22:57:58

标签: solr schema wildcard

我已经实现了Solr 7.6索引并填充了它。我的第一个方案很简单...

# A tibble: 2 x 2
  b         n
  <fct> <int>
1 x        42
2 y        22

我添加了数百个文档,知道其中两个包含“菠萝”一词。

然后我继续测试查询...

{
"add-field": [{
    "name": "name",
    "type": "text_en",
    "indexed": true,
    "stored": true
}, {
    "name": "description",
    "type": "text_en",
    "indexed": true,
    "stored": true
}, {
    "name": "datafile-meta",
    "type": "text_en",
    "indexed": true,
    "stored": false
}, {
    "name": "datafile-content",
    "type": "text_en",
    "indexed": true,
    "stored": false
}]
}

hits = 2 status = 0 QTime = 0

((name:pineapple)OR(description:pineapple)OR(datafile-meta:pineapple)OR(datafile-content:pineapple))

hits = 2 status = 0 QTime = 1

((name:pine*)OR(description:pine*)OR(datafile-meta:pine*)OR(datafile-content:pine*))

hits = 0 status = 0 QTime = 3

((name:*apple)OR(description:*apple)OR(datafile-meta:*apple)OR(datafile-content:*apple))

hits = 0 status = 0 QTime = 3

((name:p*ple)OR(description:p*ple)OR(datafile-meta:p*ple)OR(datafile-content:p*ple))

hits = 0 status = 0 QTime = 2

因此,只有((name:p?????ple)OR(description:p?????ple)OR(datafile-meta:p?????ple)OR(datafile-content:p?????ple)) pineapple返回了匹配。我不明白为什么其他通配符组合pine**applep*ple返回零。

我选择了错误的字段类型吗?

1 个答案:

答案 0 :(得分:0)

从您尝试使用通配符开始,我认为您选择了错误的类型。您正在搜索单词的字符片段,通常使用ngrams完成。

对于您的问题,为什么没有奏效。出现通配符(*?)时,Solr不会立即分析文本。但是,由于您的字段使用分析类型,因此索引内容与查询内容不匹配。您可以使用Solr实例的Analysis Screen进行检查。

作为一般的经验法则,当您开始使用通配符时,使用正确的标记器和过滤器可以做的更好。当您喜欢使用通配符时,仍然会想到源自非索引系统的模式-例如如SQL数据库中的查询。在我到目前为止开发的系统中,我们很快开始从用户输入中剥离通配符,并用空格代替,以避免这种共谋。