是否可以使用lucene查询语法在ElasticSearch中搜索嵌套对象?

时间:2016-02-12 02:44:37

标签: elasticsearch lucene

我非常喜欢Lucene查询语言与ElasticSearch的简单可组合性。我们刚刚开始使用嵌套对象,我理解我need to use a nested query to search them,但我无法在使用Lucene语法进行嵌套查询的任何地方找到任何信息。

如果有可能,某处有文件吗?

我已经为“elasticsearch lucene”进行了相当广泛的谷歌搜索,我很难找到偶尔提到语法的博客文章,更不用说实际的文档了。同样,在Stack Overflow上搜索也毫无结果。

1 个答案:

答案 0 :(得分:2)

Lucene目前不支持此功能。

Elastic Github回购中存在一些相关问题,但主要问题可在#11322 Support for nested query syntax within query string query DSL

获取

相关的拉取请求:#11339 feature/querystringquery-nestedqueries

如果你查看讨论,你会发现这不是ES人认为值得深入探讨的事情。

因此,查询nested类型对象的唯一方法是使用import com.techdsk.musicdsk.musicdsk.adapter.CustomAdapter; import com.techdsk.musicdsk.musicdsk.controls.Controls; import com.techdsk.musicdsk.musicdsk.service.SongService; import com.techdsk.musicdsk.musicdsk.util.MediaItem; import com.techdsk.musicdsk.musicdsk.util.PlayerConstants; import com.techdsk.musicdsk.musicdsk.util.UtilFunctions; public class MainActivity extends Activity { String LOG_CLASS = "MainActivity"; CustomAdapter customAdapter = null; static TextView playingSong; Button btnPlayer; static Button btnPause, btnPlay, btnNext, btnPrevious; Button btnStop; LinearLayout mediaLayout; static LinearLayout linearLayoutPlayingSong; ListView mediaListView; ProgressBar progressBar; TextView textBufferDuration, textDuration; static ImageView imageViewAlbumArt; static Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().hide(); setContentView(R.layout.activity_main); context = MainActivity.this; init(); } private void init() { getViews(); setListeners(); playingSong.setSelected(true); progressBar.getProgressDrawable().setColorFilter(getResources().getColor(R.color.white), Mode.SRC_IN); if(PlayerConstants.SONGS_LIST.size() <= 0){ PlayerConstants.SONGS_LIST = UtilFunctions.listOfSongs(getApplicationContext()); } setListItems(); } private void setListItems() { customAdapter = new CustomAdapter(this,R.layout.custom_list, PlayerConstants.SONGS_LIST); mediaListView.setAdapter(customAdapter); mediaListView.setFastScrollEnabled(true); } private void getViews() { playingSong = (TextView) findViewById(R.id.textNowPlaying); btnPlayer = (Button) findViewById(R.id.btnMusicPlayer); mediaListView = (ListView) findViewById(R.id.listViewMusic); mediaLayout = (LinearLayout) findViewById(R.id.linearLayoutMusicList); btnPause = (Button) findViewById(R.id.btnPause); btnPlay = (Button) findViewById(R.id.btnPlay); linearLayoutPlayingSong = (LinearLayout) findViewById(R.id.linearLayoutPlayingSong); progressBar = (ProgressBar) findViewById(R.id.progressBar); btnStop = (Button) findViewById(R.id.btnStop); textBufferDuration = (TextView) findViewById(R.id.textBufferDuration); textDuration = (TextView) findViewById(R.id.textDuration); imageViewAlbumArt = (ImageView) findViewById(R.id.imageViewAlbumArt); btnNext = (Button) findViewById(R.id.btnNext); btnPrevious = (Button) findViewById(R.id.btnPrevious); } private void setListeners() { mediaListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View item, int position, long id){ Log.d("TAG", "TAG Tapped INOUT(IN)"); PlayerConstants.SONG_PAUSED = false; PlayerConstants.SONG_NUMBER = position; boolean isServiceRunning = UtilFunctions.isServiceRunning(SongService.class.getName(), getApplicationContext()); if (!isServiceRunning) { Intent i = new Intent(getApplicationContext(),SongService.class); startService(i); } else { PlayerConstants.SONG_CHANGE_HANDLER.sendMessage(PlayerConstants.SONG_CHANGE_HANDLER.obtainMessage()); } updateUI(); changeButton(); Log.d("TAG", "TAG Tapped INOUT(OUT)"); } }); btnPlayer.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,AudioPlayerActivity.class); startActivity(i); } }); btnPlay.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Controls.playControl(getApplicationContext()); } }); btnPause.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Controls.pauseControl(getApplicationContext()); } }); btnNext.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Controls.nextControl(getApplicationContext()); } }); btnPrevious.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Controls.previousControl(getApplicationContext()); } }); btnStop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getApplicationContext(), SongService.class); stopService(i); linearLayoutPlayingSong.setVisibility(View.GONE); } }); imageViewAlbumArt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,AudioPlayerActivity.class); startActivity(i); } }); } @Override protected void onResume() { super.onResume(); try{ boolean isServiceRunning = UtilFunctions.isServiceRunning(SongService.class.getName(), getApplicationContext()); if (isServiceRunning) { updateUI(); }else{ linearLayoutPlayingSong.setVisibility(View.GONE); } changeButton(); PlayerConstants.PROGRESSBAR_HANDLER = new Handler(){ @Override public void handleMessage(Message msg){ Integer i[] = (Integer[])msg.obj; textBufferDuration.setText(UtilFunctions.getDuration(i[0])); textDuration.setText(UtilFunctions.getDuration(i[1])); progressBar.setProgress(i[2]); } }; }catch(Exception e){} } @SuppressWarnings("deprecation") public static void updateUI() { try{ MediaItem data = PlayerConstants.SONGS_LIST.get(PlayerConstants.SONG_NUMBER); playingSong.setText(data.getTitle() + " " + data.getArtist() + "-" + data.getAlbum()); Bitmap albumArt = UtilFunctions.getAlbumart(context, data.getAlbumId()); if(albumArt != null){ imageViewAlbumArt.setBackgroundDrawable(new BitmapDrawable(albumArt)); }else{ imageViewAlbumArt.setBackgroundDrawable(new BitmapDrawable(UtilFunctions.getDefaultAlbumArt(context))); } linearLayoutPlayingSong.setVisibility(View.VISIBLE); }catch(Exception e){} } public static void changeButton() { if(PlayerConstants.SONG_PAUSED){ btnPause.setVisibility(View.GONE); btnPlay.setVisibility(View.VISIBLE); }else{ btnPause.setVisibility(View.VISIBLE); btnPlay.setVisibility(View.GONE); } } public static void changeUI(){ updateUI(); changeButton(); } } 查询/过滤器。