我是Solr的新手,我试图检索这样的文件,按有效载荷排序。
{ "id": "1", "tags": ["Cat|0.8", "Dog|0.2"] },
{ "id": "2", "tags": ["Cat|0.4", "Dog|0.6"] }
我尝试使用有效负载来增强每个标记,但所有信息我发现它有点旧。 This是我发现的最新出版物。
但我发现this, too并且我不知道是否有比第一种方法更新的东西。使用第二个链接,我想我可以添加到schema.xml
<fieldType name="tags" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float" delimiter="|"/>
</analyzer>
</fieldType>
有效载荷将被识别。但我不知道如何检查,我只看到搜索&#34; Dog&#34;结果未按有效负载排序。
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"q":"Dog",
"indent":"on",
"wt":"json",
"_":"1493191003038"}},
"response":{"numFound":2,"start":0,"docs":[
{
"id":"1",
"tags":["Cat|0.8",
"Dog|0.2"],
"_version_":1565724328306147328},
{
"id":"2",
"tags":["Cat|0.4",
"Dog|0.6"],
"_version_":1565724328307195904}]
}}
所以我不知道该怎么做......即使我有最新的Solr版本,我是否应该遵循第一个教程?我的目标很简单:按标签中的有效负载对响应进行排序。
答案 0 :(得分:0)
假设可能的值或标签有限(不超过数千),恕我直言最简单的方法是:
将数据按照Solr更容易使用的格式,例如:
{ "id": "1", "tags": ["Cat", "Dog"], "tag_Cat": "0.8", "tag_Dog":"0.2"}
对于tag_ type字段,您可以定义一个涵盖所有可能性的dynamicField tag_ *,并将其索引到tfloat(也可能是docValues)
现在您可以在每次需要时通过相关字段(tag_Cat ...)轻松排序(或提升)。