Solr MoreLike此处理程序返回0个元素

时间:2018-08-08 11:04:49

标签: solr morelikethis

编辑:使用另一个具有相同功能(类型=“ text_general” indexed =“ true”存储=“ true”)的搜索字段(mlt.fl)更改后,它开始以
并非每个文档中的'description'字段都不为空,所以我不知道这种差异的原因,但是如果我发现更多内容,我会在这里写。我不会删除此问题,希望它可以用作相同问题的常见解决方案的列表。

我有一些使用Solr 4.0.0编制索引的文档,并且我试图获取与给定文档相似的文档,但是没有任何结果。 我所做的:

1.在 schema.xml 中,我修改了要搜索的字段,添加termVectors =“ true”:

package com.name.mediabrowsertest


import android.media.MediaDescription
import android.media.browse.MediaBrowser
import android.media.session.MediaSession
import android.os.Build
import android.os.Bundle
import android.support.annotation.RequiresApi
import android.support.v4.media.MediaBrowserCompat
import android.support.v4.media.MediaBrowserServiceCompat
import android.support.v4.media.MediaDescriptionCompat
import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log


class MediaPlaybackService: MediaBrowserServiceCompat(){

    private val MY_MEDIA_ROOT_ID  = "MediaStore.Audio.Media.EXTERNAL_CONTENT_URI"

    private lateinit var mMediaSession: MediaSessionCompat
    private lateinit var mStateBuilder : PlaybackStateCompat.Builder
    private var  MySessionCallback =object : MediaSessionCompat.Callback() {
        override fun onPause() {
            super.onPause()
        }

        override fun onPlay() {
            super.onPlay()
        }
    }

    override fun onCreate() {
        super.onCreate()
        //Create the MediaSession
        mMediaSession = MediaSessionCompat(this,"PLAYER")
        //Setting the necessary Flags (Media Buttons)
        mMediaSession.setFlags(
                MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
        //Set an inital PlaybackStatewith ACTION_BUTTONS, so Media  buttons can start the player
        mStateBuilder = PlaybackStateCompat.Builder().setActions(
                PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PAUSE)
        //Set our PLaybackState for the MediaSession
        mMediaSession.setPlaybackState(mStateBuilder.build())

        //Handles callbacks from Media Controller MySessionCalback is a PlaeHolder
        mMediaSession.setCallback(MySessionCallback)
        //Set SessionToken so Activites can communicate with it
        sessionToken = mMediaSession.sessionToken



    }

    override fun onLoadChildren(parentId: String, result: Result<MutableList<MediaBrowserCompat.MediaItem>>) {
        var mediaItems:ArrayList<MediaBrowserCompat.MediaItem> = ArrayList()

        var builder  = MediaDescriptionCompat.Builder()
        builder.setDescription("T")

        builder.setTitle("Media Items")
        var mediaItem = MediaBrowserCompat.MediaItem(builder.build(),MediaBrowser.MediaItem.FLAG_PLAYABLE)
        mediaItems.add(mediaItem)
        var res = mediaItems.toMutableList()
        for(x in res){
            Log.i("Musik",x.toString())
        }
        result.sendResult(res)

    }

    override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {

        return BrowserRoot(MY_MEDIA_ROOT_ID,null)

    }



}


2.在 solrconfig.xml 中,我添加了一个RequestHandler:

<field name="description" type="text_general" indexed="true" stored="true" termVectors="true" />


3.我重新启动了Solr并执行以下查询:

<requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
<lst name="defaults">
    <str name="mlt.fl">description</str>
</lst>
</requestHandler>

我希望获得一些字段为“ description”的文档,类似于id = 123456的文档的“ description”字段,但是我得到一个空响应:

http://localhost:8983/solr/mlt?q=id:123456&mlt.match.include=false

每个文档中都填入“描述”字段。 我尝试过:

  • 将字段类型为text_general的令牌生成器从StandardTokenizerFactory更改为WhitespaceTokenizerFactory(建议here

  • 使用MoreLikeThisComponent而不是MoreLikeThisHandler,并执行类似以下查询:

    http://localhost:8983/solr/select?q=id:123456&mlt=true&mlt.fl=description

  • schema.xml中的默认值中更改mintf(0,1,..),mindf(0,1,..),qf(描述)和boost(true,false)参数以及查询(同时使用/ select和/ mlt)。

以上内容均无效。 Solr与所有其他查询类型完美配合。我不知道可能出什么问题,因为我遵循了发现的所有指南和教程(此处也有很多答案)。有什么想法吗?

0 个答案:

没有答案