我已经实现了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*
,*apple
和p*ple
返回零。
我选择了错误的字段类型吗?
答案 0 :(得分:0)
从您尝试使用通配符开始,我认为您选择了错误的类型。您正在搜索单词的字符片段,通常使用ngrams完成。
对于您的问题,为什么没有奏效。出现通配符(*
,?
)时,Solr不会立即分析文本。但是,由于您的字段使用分析类型,因此索引内容与查询内容不匹配。您可以使用Solr实例的Analysis Screen进行检查。
作为一般的经验法则,当您开始使用通配符时,使用正确的标记器和过滤器可以做的更好。当您喜欢使用通配符时,仍然会想到源自非索引系统的模式-例如如SQL数据库中的查询。在我到目前为止开发的系统中,我们很快开始从用户输入中剥离通配符,并用空格代替,以避免这种共谋。