如果我搜索toto.pdf,会为搜索创建一个标记“pdf”,以便索引某些数据,包括文件名。
我想要的是,根据索引文件名:
MySupercool123girlfriend.jpg
并且能够将其与:
联系起来supercool
supercool123
123
girlfriend
jpg
所以在索引处很容易使用WordDelimiterFilterFactory来创建一些标记,如:
my
supercool
mysupercool
mysupercool123
supercool123
123
girlfriend
jpg
girlfriend.jgp
etc...
问题是,在搜索时,我真的不知道该怎么做。
如果我在搜索时使用WordDelimiterFilterFactory,MySupercool123girlfriend.jpg
甚至会与toto.jpg
匹配,因为在这两种情况下都会创建一个令牌jpg
。
toto.jpg
根本不应该在结果列表中,因此对于我来说,使用具有更好得分的合适结果并不是一个解决方案
您是否有建议索引和搜索文件名?
答案 0 :(得分:1)
对于你的这个具体例子,即如果搜索是MySupercool123girlfriend.jpg
,并且你希望它只返回包含整个字符串的文档,你可以保留一个copyField,比如名为{{ 1}},其fieldType为filename_str
。字符串匹配将确保您获得完全匹配。这可能是您进行的第一级“完全匹配”搜索。
但是,我猜您希望搜索string
以返回包含123girlfriend.jpg
的文档。您可以进行二级搜索。从Solr 4.0开始,你可以进行像
MySupercool123girlfriend.jpg
(如果您在索引时在WordDelimiterFilterFactory中使用q=filename_str:/.*123girlfriend.jpg/
,则此正则表达式查询也适用于filename
字段本身。)
否则你可以做一个leading wild-card search,它也适用于早期的Solr版本。
如果您还希望preserveOriginal=1
与MySupercool.jpg
匹配,那么我猜你必须手动完成DelimiterFilterFactory的工作并构建一个像
MySupercool123girlfriend.jpg
另一个问题是q=filename_str:/.*My.*Supercool.*.jpg/
将匹配大量文档,因此您可能希望拆分文件名和扩展名,并将它们保存为单独的字段。
答案 1 :(得分:1)
你能为你的用例DisMax mm参数找到一些有意义的吗?
请参阅http://wiki.apache.org/solr/DisMaxQParserPlugin#mm_.28Minimum_.27Should.27_Match.29
E.g。 mm = 100%,“MySupercool123girlfriend.jpg”只匹配其中包含所有[“my”,“supercool”,“123”,“boys”,“jpg”]条款的文件名
您可以找到一些不太严格但仍然给出相关结果的表达式。见http://lucene.apache.org/solr/4_1_0/solr-core/org/apache/solr/util/doc-files/min-should-match.html