1

我正在尝试将我的类别 ID 映射到他们在 Solr 中的名称,以允许使用该类别名称进行文本搜索

我的计划是使用自定义 fieldType 规范,它使用 MappingCharFilterFactory 将我的 id 映射到它们的类别,使用 synonyms.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 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>

同义词.txt

...
"14" => "Music"
"16" => "Science"
"17" => "Sports & Games"
"18" => "Technology & Manufacturing"
...
4

1 回答 1

2

Solr 不会更改随响应返回的实际存储值。它只会更新索引值。
这就是为什么您的搜索将对索引值起作用的原因。但是,Solr 返回的响应将始终具有存储的值。
您需要在客户端处理更改,以便 Solr 将其与响应一起返回。

于 2012-12-21T11:03:44.250 回答