编辑:使用另一个具有相同功能(类型=“ 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与所有其他查询类型完美配合。我不知道可能出什么问题,因为我遵循了发现的所有指南和教程(此处也有很多答案)。有什么想法吗?