1Search::Elasticsearch::UCsleSireeanCrtoc:nh:t:8r:_iE0bl:ua:tsDetidircePsceetra:lr:cIDhno:dc:iuCcmleeisne(tn3at)t:i:o8n_0::Direct::Indices(3)
2
3
4
6 Search::Elasticsearch::Client::8_0::Direct::Indices - A client for
7 running index-level requests
8
10 version 8.00
11
13 This module provides methods to make index-level requests, such as
14 creating and deleting indices, managing type mappings, index settings,
15 index templates and aliases.
16
17 It does Search::Elasticsearch::Role::Client::Direct.
18
20 create()
21 $result = $e->indices->create(
22 index => 'my_index' # required
23
24 body => { # optional
25 index settings
26 mappings
27 aliases
28 }
29 );
30
31 The create() method is used to create an index. Optionally, index
32 settings, type mappings, and aliases can be added at the same time.
33
34 Query string parameters:
35 "error_trace",
36 "human",
37 "include_type_name",
38 "master_timeout",
39 "timeout",
40 "update_all_types",
41 "wait_for_active_shards"
42
43 See the create index docs
44 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
45 create-index.html> for more information.
46
47 get()
48 $response = $e->indices->get(
49 index => 'index' | \@indices # required
50 );
51
52 Returns the aliases, settings, and mappings for the specified indices.
53
54 See the get index docs
55 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
56 get-index.html>.
57
58 Query string parameters:
59 "allow_no_indices",
60 "error_trace",
61 "expand_wildcards",
62 "flat_settings",
63 "human",
64 "ignore_unavailable",
65 "include_defaults",
66 "include_type_name",
67 "local",
68 "master_timeout"
69
70 exists()
71 $bool = $e->indices->exists(
72 index => 'index' | \@indices # required
73 );
74
75 The exists() method returns 1 or the empty string to indicate whether
76 the specified index or indices exist.
77
78 Query string parameters:
79 "allow_no_indices",
80 "error_trace",
81 "expand_wildcards",
82 "flat_settings",
83 "human",
84 "ignore_unavailable",
85 "include_defaults",
86 "local"
87
88 See the index exists docs
89 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
90 indices-exists.html> for more information.
91
92 delete()
93 $response = $e->indices->delete(
94 index => 'index' | \@indices # required
95 );
96
97 The delete() method deletes the specified indices.
98
99 Query string parameters:
100 "allow_no_indices",
101 "error_trace",
102 "expand_wildcards",
103 "human",
104 "ignore_unavailable",
105 "master_timeout",
106 "timeout"
107
108 See the delete index docs
109 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
110 delete-index.html> for more information.
111
112 close()
113 $response = $e->indices->close(
114 index => 'index' | \@indices # required
115 );
116
117 The close() method closes the specified indices, reducing resource
118 usage but allowing them to be reopened later.
119
120 Query string parameters:
121 "allow_no_indices",
122 "error_trace",
123 "expand_wildcards",
124 "human",
125 "ignore_unavailable"
126 "master_timeout",
127 "timeout"
128
129 See the close index docs
130 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
131 open-close.html> for more information.
132
133 open()
134 $response = $e->indices->open(
135 index => 'index' | \@indices # required
136 );
137
138 The open() method opens closed indices.
139
140 Query string parameters:
141 "allow_no_indices",
142 "error_trace",
143 "expand_wildcards",
144 "human",
145 "ignore_unavailable"
146 "master_timeout",
147 "timeout",
148 "wait_for_active_shards"
149
150 See the open index docs
151 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
152 open-close.html> for more information.
153
154 rollover()
155 $response = $e->indices->rollover(
156 alias => $alias, # required
157 new_index => $index, # optional
158 body => { rollover conditions } # optional
159 );
160
161 Rollover an index pointed to by "alias" if it meets rollover conditions
162 (eg max age, max docs) to a new index name.
163
164 Query string parameters:
165 "dry_run",
166 "error_trace",
167 "human",
168 "include_type_name",
169 "master_timeout",
170 "timeout",
171 "wait_for_active_shards"
172
173 See the rollover index docs
174 <https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
175 rollover-index.html> for more information.
176
177 shrink()
178 $response = $e->shrink(
179 index => $index, # required
180 target => $target, # required
181 body => { mappings, settings aliases } # optional
182 );
183
184 The shrink API shrinks the shards of an index down to a single shard
185 (or to a factor of the original shards).
186
187 Query string parameters:
188 "copy_settings",
189 "error_trace",
190 "filter_path",
191 "human",
192 "master_timeout",
193 "timeout",
194 "wait_for_active_shards"
195
196 See the shrink index docs
197 <https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
198 shrink-index.html> for more information.
199
200 split()
201 $response = $e->split(
202 index => $index, # required
203 target => $target, # required
204 );
205
206 The split API splits a shard into multiple shards.
207
208 Query string parameters:
209 "copy_settings",
210 "error_trace",
211 "filter_path",
212 "human",
213 "master_timeout",
214 "timeout",
215 "wait_for_active_shards"
216
217 See the split index docs
218 <https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
219 split-index.html> for more information.
220
221 freeze()
222 $response = $e->indices->freeze(
223 $index => $index # required
224 );
225
226 The freeze() API is used to freeze an index, which puts it in a state
227 which has almost no overhead on the cluster.
228
229 Query string parameters:
230 "allow_no_indices",
231 "error_trace",
232 "expand_wildcards",
233 "filter_path",
234 "human",
235 "ignore_unavailable",
236 "master_timeout",
237 "timeout",
238 "wait_for_active_shards"
239
240 See the freeze index docs
241 <https://www.elastic.co/guide/en/elasticsearch/reference/current/freeze-
242 index-api.html> for more information.
243
244 unfreeze()
245 $response = $e->indices->unfreeze(
246 $index => $index # required
247 );
248
249 The unfreeze() API is used to return a frozen index to its normal
250 state.
251
252 Query string parameters:
253 "allow_no_indices",
254 "error_trace",
255 "expand_wildcards",
256 "filter_path",
257 "human",
258 "ignore_unavailable",
259 "master_timeout",
260 "timeout",
261 "wait_for_active_shards"
262
263 See the unfreeze index docs
264 <https://www.elastic.co/guide/en/elasticsearch/reference/current/freeze-
265 index-api.html> for more information.
266
267 clear_cache()
268 $response = $e->indices->clear_cache(
269 index => 'index' | \@indices # optional
270 );
271
272 The clear_cache() method is used to clear the in-memory filter,
273 fielddata, or id cache for the specified indices.
274
275 Query string parameters:
276 "allow_no_indices",
277 "error_trace",
278 "expand_wildcards",
279 "fielddata",
280 "fields",
281 "human",
282 "ignore_unavailable",
283 "query",
284 "request"
285
286 See the clear_cache docs
287 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
288 clearcache.html> for more information.
289
290 refresh()
291 $response = $e->indices->refresh(
292 index => 'index' | \@indices # optional
293 );
294
295 The refresh() method refreshes the specified indices (or all indices),
296 allowing recent changes to become visible to search. This process
297 normally happens automatically once every second by default.
298
299 Query string parameters:
300 "allow_no_indices",
301 "error_trace",
302 "expand_wildcards",
303 "human",
304 "ignore_unavailable"
305
306 See the refresh index docs
307 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
308 refresh.html> for more information.
309
310 flush()
311 $response = $e->indices->flush(
312 index => 'index' | \@indices # optional
313 );
314
315 The flush() method causes the specified indices (or all indices) to be
316 written to disk with an "fsync", and clears out the transaction log.
317 This process normally happens automatically.
318
319 Query string parameters:
320 "allow_no_indices",
321 "error_trace",
322 "expand_wildcards",
323 "force",
324 "human",
325 "ignore_unavailable",
326 "wait_if_ongoing"
327
328 See the flush index docs
329 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
330 flush.html> for more information.
331
332 flush_synced()
333 $respnse = $e->indices->flush_synced(
334 index => 'index' | \@indices # optional
335 );
336
337 The flush_synced() method does a synchronised flush() on the primaries
338 and replicas of all the specified indices. In other words, after
339 flushing it tries to write a "sync_id" on the primaries and replicas to
340 mark them as containing the same documents. During recovery, if a
341 replica has the same "sync_id" as the primary, then it doesn't need to
342 check whether the segment files on primary and replica are the same,
343 and it can move on directly to just replaying the translog. This can
344 greatly speed up recovery.
345
346 Synced flushes happens automatically in the background on indices that
347 have not received any writes for a while, but the flush_synced() method
348 can be used to trigger this process manually, eg before shutting down.
349 Any new commits immediately break the sync.
350
351 See the flush synced docs
352 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
353 synced-flush.html> for more information.
354
355 Query string parameters:
356 "allow_no_indices",
357 "error_trace",
358 "expand_wildcards",
359 "human",
360 "ignore_unavailable"
361
362 forcemerge()
363 $response = $e->indices->forcemerge(
364 index => 'index' | \@indices # optional
365 );
366
367 The forcemerge() method rewrites all the data in an index into at most
368 "max_num_segments". This is a very heavy operation and should only be
369 run with care, and only on indices that are no longer being updated.
370
371 Query string parameters:
372 "allow_no_indices",
373 "error_trace",
374 "expand_wildcards",
375 "flush",
376 "human",
377 "ignore_unavailable",
378 "max_num_segments",
379 "only_expunge_deletes"
380
381 See the forcemerge docs
382 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
383 forcemerge.html> for more information.
384
385 get_upgrade()
386 $response = $e->indices->get_upgrade(
387 index => 'index' | \@indices # optional
388 );
389
390 The get_upgrade() method returns information about which indices need
391 to be upgraded, which can be done with the upgrade() method.
392
393 Query string parameters:
394 "allow_no_indices",
395 "error_trace",
396 "expand_wildcards",
397 "human",
398 "ignore_unavailable"
399
400 See the upgrade docs
401 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
402 upgrade.html> for more information.
403
404 upgrade()
405 $response = $e->indices->upgrade(
406 index => 'index' | \@indices # optional
407 );
408
409 The upgrade() method upgrades all segments in the specified indices to
410 the latest format.
411
412 Query string parameters:
413 "allow_no_indices",
414 "error_trace",
415 "expand_wildcards",
416 "human",
417 "ignore_unavailable",
418 "only_ancient_segments",
419 "wait_for_completion"
420
421 See the upgrade docs
422 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
423 upgrade.html> for more information.
424
426 put_mapping()
427 $response = $e->indices->put_mapping(
428 index => 'index' | \@indices # optional,
429 type => 'type', # optional
430
431 body => { mapping } # required
432 )
433
434 The put_mapping() method is used to create or update a type mapping on
435 an existing index. Mapping updates are allowed to add new fields, but
436 not to overwrite or change existing fields.
437
438 For instance:
439
440 $response = $e->indices->put_mapping(
441 index => 'users',
442 type => 'user',
443 body => {
444 user => {
445 properties => {
446 name => { type => 'string' },
447 age => { type => 'integer' }
448 }
449 }
450 }
451 );
452
453 Query string parameters:
454 "allow_no_indices",
455 "error_trace",
456 "expand_wildcards",
457 "human",
458 "ignore_unavailable",
459 "include_type_name",
460 "master_timeout",
461 "timeout",
462 "update_all_types"
463
464 See the put_mapping docs
465 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
466 put-mapping.html> for more information.
467
468 get_mapping()
469 $result = $e->indices->get_mapping(
470 index => 'index' | \@indices # optional,
471 type => 'type' | \@types # optional
472 );
473
474 The get_mapping() method returns the type definitions for one, more or
475 all types in one, more or all indices.
476
477 Query string parameters:
478 "allow_no_indices",
479 "error_trace",
480 "expand_wildcards",
481 "human",
482 "ignore_unavailable",
483 "include_type_name",
484 "local",
485 "master_timeout"
486
487 See the get_mapping docs
488 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
489 get-mapping.html> for more information.
490
491 get_field_mapping()
492 $result = $e->indices->get_field_mapping(
493 index => 'index' | \@indices # optional,
494 type => 'type' | \@types # optional,
495 fields => 'field' | \@fields # required
496
497 include_defaults => 0 | 1
498 );
499
500 The get_field_mapping() method returns the field definitions for one,
501 more or all fields in one, more or all types and indices.
502
503 Query string parameters:
504 "allow_no_indices",
505 "error_trace",
506 "expand_wildcards",
507 "human",
508 "ignore_unavailable",
509 "include_defaults",
510 "include_type_name",
511 "local"
512
513 See the get_mapping docs
514 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
515 get-field-mapping.html> for more information.
516
517 exists_type()
518 $bool = $e->indices->exists_type(
519 index => 'index' | \@indices # required,
520 type => 'type' | \@types # required
521 );
522
523 The exists_type() method checks for the existence of all specified
524 types in all specified indices, and returns 1 or the empty string.
525
526 Query string parameters:
527 "allow_no_indices",
528 "error_trace",
529 "expand_wildcards",
530 "human",
531 "ignore_unavailable",
532 "local"
533
534 See the exists_type docs
535 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
536 types-exists.html> for more information.
537
539 update_aliases()
540 $response = $e->indices->update_aliases(
541 body => { actions } # required
542 );
543
544 The update_aliases() method changes (by adding or removing) multiple
545 index aliases atomically. For instance:
546
547 $response = $e->indices->update_aliases(
548 body => {
549 actions => [
550 { add => { alias => 'current', index => 'logs_2013_09' }},
551 { remove => { alias => 'current', index => 'logs_2013_08' }}
552 ]
553 }
554 );
555
556 Query string parameters:
557 "error_trace",
558 "human",
559 "master_timeout",
560 "timeout"
561
562 See the update_aliases docs
563 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
564 aliases.html> for more information.
565
566 put_alias()
567 $response = $e->indices->put_alias(
568 index => 'index' | \@indices, # required
569 name => 'alias', # required
570
571 body => { alias defn } # optional
572 );
573
574 The put_alias() method creates an index alias. For instance:
575
576 $response = $e->indices->put_alias(
577 index => 'my_index',
578 name => 'twitter',
579 body => {
580 filter => { term => { user_id => 'twitter' }}
581 }
582 );
583
584 Query string parameters:
585 "error_trace",
586 "human",
587 "master_timeout",
588 "timeout"
589
590 See the put_alias docs
591 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
592 aliases.html> for more information.
593
594 get_alias()
595 $result = $e->indices->get_alias(
596 index => 'index' | \@indices, # optional
597 name => 'alias' | \@aliases # optional
598 );
599
600 The get_alias() method returns the alias definitions for the specified
601 aliases in the specified indices.
602
603 Query string parameters:
604 "allow_no_indices",
605 "error_trace",
606 "expand_wildcards",
607 "human",
608 "ignore_unavailable",
609 "local"
610
611 See the get_alias docs
612 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
613 aliases.html> for more information.
614
615 exists_alias()
616 $bool = $e->indices->exists_alias(
617 index => 'index' | \@indices, # optional
618 name => 'alias' | \@aliases # required
619 );
620
621 The exists_alias() method returns 1 or the empty string depending on
622 whether the specified aliases exist in the specified indices.
623
624 Query string parameters:
625 "allow_no_indices",
626 "error_trace",
627 "expand_wildcards",
628 "human",
629 "ignore_unavailable",
630 "local"
631
632 See the exists_alias docs
633 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
634 aliases.html> for more information.
635
636 delete_alias()
637 $response = $e->indices->delete_alias(
638 index => 'index' | \@indices # required,
639 name => 'alias' | \@aliases # required
640 );
641
642 The delete_alias() method deletes one or more aliases from one or more
643 indices.
644
645 Query string parameters:
646 "error_trace",
647 "human",
648 "master_timeout",
649 "timeout"
650
651 See the delete_alias docs
652 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
653 aliases.html> for more information.
654
656 put_settings()
657 $response = $e->indices->put_settings(
658 index => 'index' | \@indices # optional
659
660 body => { settings }
661 );
662
663 The put_settings() method sets the index settings for the specified
664 indices or all indices. For instance:
665
666 $response = $e->indices->put_settings(
667 body => {
668 "index.refresh_interval" => -1
669 }
670 );
671
672 Query string parameters:
673 "allow_no_indices",
674 "error_trace",
675 "expand_wildcards",
676 "flat_settings",
677 "human",
678 "ignore_unavailable",
679 "master_timeout",
680 "preserve_existing",
681 "timeout"
682
683 See the put_settings docs
684 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
685 update-settings.html> for more information.
686
687 get_settings()
688 $result = $e->indices->get_settings(
689 index => 'index' | \@indices # optional
690 name => 'name' | \@names # optional
691 );
692
693 The get_settings() method retrieves the index settings for the
694 specified indices or all indices.
695
696 Query string parameters:
697 "allow_no_indices",
698 "error_trace",
699 "expand_wildcards",
700 "flat_settings",
701 "human",
702 "ignore_unavailable",
703 "include_defaults",
704 "local",
705 "master_timeout"
706
707 See the get_settings docs
708 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
709 get-settings.html> for more information.
710
712 put_template()
713 $response = $e->indices->put_template(
714 name => 'template' # required
715 body => { template defn } # required
716 );
717
718 The put_template() method is used to create or update index templates.
719
720 Query string parameters:
721 "create",
722 "error_trace",
723 "flat_settings",
724 "human",
725 "include_type_name",
726 "master_timeout",
727 "order",
728 "timeout"
729
730 See the put_template docs
731 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
732 templates.html> for more information.
733
734 get_template()
735 $result = $e->indices->get_template(
736 name => 'template' | \@templates # optional
737 );
738
739 The get_template() method is used to retrieve a named template.
740
741 Query string parameters:
742 "error_trace",
743 "flat_settings",
744 "human",
745 "include_type_name",
746 "local",
747 "master_timeout"
748
749 See the get_template docs
750 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
751 templates.html> for more information.
752
753 exists_template()
754 $result = $e->indices->exists_template(
755 name => 'template' # optional
756 );
757
758 The exists_template() method is used to check whether the named
759 template exists.
760
761 Query string parameters:
762 "error_trace",
763 "flat_settings",
764 "human",
765 "local",
766 "master_timeout"
767
768 See the get_template docs
769 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
770 templates.html> for more information.
771
772 delete_template()
773 $response = $e->indices->delete_template(
774 name => 'template' # required
775 );
776
777 The delete_template() method is used to delete a named template.
778
779 Query string parameters:
780 "error_trace",
781 "human",
782 "master_timeout",
783 "timeout",
784 "version",
785 "version_type"
786
787 See the delete_template docs
788 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
789 templates.html> for more information.
790
792 stats()
793 $result = $e->indices->stats(
794 index => 'index' | \@indices # optional
795 metric => 'metric' | \@metrics # optional
796 );
797
798 The stats() method returns statistical information about one, more or
799 all indices. By default it returns all metrics, but you can limit which
800 metrics are returned by specifying the "metric".
801
802 Allowed metrics are:
803 "_all",
804 "completion"
805 "docs",
806 "fielddata",
807 "filter_cache",
808 "flush",
809 "get",
810 "id_cache",
811 "indexing",
812 "merge",
813 "percolate",
814 "query_cache",
815 "refresh",
816 "request_cache",
817 "search",
818 "segments",
819 "store"
820
821 Query string parameters:
822 "completion_fields",
823 "error_trace",
824 "fielddata_fields",
825 "fields",
826 "groups",
827 "human",
828 "include_segment_file_sizes",
829 "level",
830 "types"
831
832 See the stats docs
833 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
834 stats.html> for more information.
835
836 recovery()
837 $result = $e->indices->recovery(
838 index => 'index' | \@indices # optional
839 );
840
841 Provides insight into on-going shard recoveries.
842
843 Query string parameters:
844 "active_only",
845 "detailed",
846 "error_trace",
847 "human"
848
849 See the recovery docs
850 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
851 recovery.html> for more information.
852
853 segments()
854 $result = $e->indices->segments(
855 index => 'index' | \@indices # optional
856 );
857
858 The segments() method is used to return information about the segments
859 that an index contains.
860
861 Query string parameters:
862 "allow_no_indices",
863 "error_trace",
864 "expand_wildcards",
865 "human",
866 "ignore_unavailable",
867 "verbose"
868
869 See the segments docs
870 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
871 segments.html> for more information.
872
873 shard_stores()
874 $result = $e->indices->shard_stores(
875 index => 'index' | \@indices # optional
876 );
877
878 The shard_stores() method is used to find out which nodes contain
879 copies of which shards, whether the shards are allocated or not.
880
881 Query string parameters:
882 "allow_no_indices",
883 "error_trace",
884 "expand_wildcards",
885 "human",
886 "ignore_unavailable",
887 "status"
888
889 See the shard_stores docs
890 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
891 shards-stores.html> for more information.
892
894 analyze()
895 $result = $e->indices->analyze(
896 index => 'index' # optional,
897 body => 'text to analyze'
898 );
899
900 The analyze() method passes the text in the "body" through the
901 specified "analyzer", "tokenizer" or token "filter" - which may be
902 global, or associated with a particular index or field - and returns
903 the tokens. Very useful for debugging analyzer configurations.
904
905 Query string parameters:
906 "error_trace",
907 "human"
908
909 See the analyze docs
910 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
911 analyze.html> for more information.
912
913 validate_query()
914 $result = $e->indices->validate_query(
915 index => 'index' | \@indices, # optional
916 type => 'type' | \@types, # optional
917
918 body => { query }
919 );
920
921 The validate_query() method accepts a query in the "body" and checks
922 whether the query is valid or not. Most useful when "explain" is set
923 to "true", in which case it includes an execution plan in the output.
924
925 Query string parameters:
926 "all_shards",
927 "allow_no_indices",
928 "analyze_wildcard",
929 "analyzer",
930 "default_operator",
931 "df",
932 "error_trace",
933 "explain",
934 "expand_wildcards",
935 "ignore_unavailable",
936 "lenient",
937 "q",
938 "rewrite"
939
940 See the validate_query docs
941 <http://www.elastic.co/guide/en/elasticsearch/reference/current/indices-
942 validate.html> for more information.
943
945 Enrico Zimuel <enrico.zimuel@elastic.co>
946
948 This software is Copyright (c) 2022 by Elasticsearch BV.
949
950 This is free software, licensed under:
951
952 The Apache License, Version 2.0, January 2004
953
954
955
956perl v5.36.0 Search::El2a0s2t3i-c0s1e-a2r0ch::Client::8_0::Direct::Indices(3)