我是 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>
并且有效负载将被识别。但我不知道如何检查,我只看到搜索“Dog”的结果不是按有效负载排序的。
{
"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 版本,我是否应该遵循第一个教程?我的目标很简单:按标签中的有效负载对响应进行排序。
最佳答案
假设可能的值或标签是有限的(不超过数千),恕我直言,对您来说最简单的路径是:
将数据整理成某种更易于 Solr 使用的格式,例如:
{ "id": "1", "tags": ["Cat", "Dog"], "tag_Cat": "0.8", "tag_Dog":"0.2"}
对于 tag_ 类型字段,您可以定义一个动态字段 tag_* 来涵盖所有可能性,并将其索引到 tfloat 中(也可能使用 docValues)
现在,您每次需要时都可以轻松地按相关字段 (tag_Cat...) 排序(或提升)。
关于java - 在 Solr 中使用有效负载获取分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628339/