Solr新手求助:添加text_partial字段后部分搜索无效,需修改DIH或Schema?
解决Solr text_partial字段无搜索结果的问题
嘿,我来帮你搞定这个问题!你已经走对了大部分路,但有两个关键细节需要调整:
1. 修正Schema中的N-Gram配置错误
你在indexAnalyzer的filters里误用了solr.NGramTokenizerFactory——这是一个分词器,而不是过滤器。正确的做法是使用solr.NGramFilterFactory,它会在分词之后对每个词生成N-Gram片段。
修正后的字段类型配置应该是这样的(重点看filters里的NGram部分):
{ "add-field-type": { "name": "text_ngram", "class": "solr.TextField", "positionIncrementGap": "100", "indexAnalyzer": { "tokenizer": { "class": "solr.WhitespaceTokenizerFactory" }, "filters": [ {"class": "solr.LowerCaseFilterFactory"}, { "class": "solr.NGramFilterFactory", // 这里改成FilterFactory "maxGramSize": "25", "minGramSize": "3" } ] }, "queryAnalyzer": { "tokenizer": { "class": "solr.WhitespaceTokenizerFactory" }, "filters": [{"class": "solr.LowerCaseFilterFactory"}] } } }
你可以用Schema API重新更新这个字段类型,或者直接修改schema.xml(如果是传统配置方式)。
2. 让DIH把文本内容写入text_partial字段
目前你的DIH配置只把Tika提取的文本写入了text字段,text_partial字段是空的,所以自然搜不到结果。有两种简单的解决方法:
方法一:直接修改DIH配置
在TikaEntityProcessor的字段映射里,添加一行把text列同时映射到text_partial字段:
<entity name="documentImport" processor="TikaEntityProcessor" url="${files.fileAbsolutePath}" format="text" transformer="TemplateTransformer,RegexTransformer" > <field column="file" name="fileName"/> <field column="Author" name="author" meta="true"/> <field column="title" name="title" meta="true"/> <field column="text" name="text"/> <field column="text" name="text_partial"/> <!-- 新增这一行 --> <!-- 其他字段保持不变 --> </entity>
方法二:使用Solr的Copy Field功能(更优雅)
如果你不想修改DIH配置,可以通过Schema API添加一个复制规则,让text字段的内容自动复制到text_partial:
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-copy-field": { "source": "text", "dest": "text_partial" } }' http://127.0.0.1:8983/solr/my_collection/schema
这种方式的好处是,后续如果有其他字段需要同步到text_partial,只需要新增复制规则即可。
最后一步:重新索引文档
完成上面的修改后,记得删除所有现有文档并重新执行DIH导入,这样新的字段配置和数据映射才会生效。
之后你再尝试q=text_partial:something,应该就能得到预期的搜索结果了!
内容的提问来源于stack exchange,提问作者Federico Destefanis
相关产品推荐
相关产品推荐

