我正在尝试将我的类别id映射到Solr中的名称,以允许使用该类别名称进行文本搜索
我的计划是使用自定义fieldType规范,它使用MappingCharFilterFactory将我的id映射到它们的类别,使用一个synonym .txt文件。在映射之后,剩下的只是一个标准的标记器和小写过滤器
虽然这是预期的工作索引(即搜索工作),我的结果仍然包含id,而不是他们的名字。
有人知道我做错了什么吗?或者是否有更好的方法来达到同样的结果?
谢谢你的帮助
字段定义
<field name="q_category_id" type="string" indexed="true" stored="true" multiValued="true" />
<field name="q_category_name" type="text_category" indexed="true" stored="true" multiValued="true" />
<copyField source="q_category_id" dest="q_category_name" />
FieldType定义<fieldType name="text_category" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="synonyms.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="synonyms.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Synonyms.txt
...
"14" => "Music"
"16" => "Science"
"17" => "Sports & Games"
"18" => "Technology & Manufacturing"
...
Solr不改变Response返回的实际存储值。它只会更新索引值。
这就是为什么您的搜索将在索引值上工作。但是,Solr返回的响应将始终具有存储的值。
您需要在客户端处理更改,以便Solr将其与Response一起返回。