├── .gitignore ├── A._Painless_API_Reference.md ├── API_Conventions.md ├── API_Conventions ├── Common_options.md ├── Date_math_support_in_index_names.md ├── Multiple_Indices.md └── URL-based_access_control.md ├── Aggregations.md ├── Aggregations ├── Aggregation_Metadata.md ├── Bucket_Aggregations.md ├── Bucket_Aggregations │ ├── Adjacency_Matrix_Aggregation.md │ ├── Children_Aggregation.md │ ├── Date_Histogram_Aggregation.md │ ├── Date_Range_Aggregation.md │ ├── Diversified_Sampler_Aggregation.md │ ├── Filter_Aggregation.md │ ├── Filters_Aggregation.md │ ├── GeoHash_grid_Aggregation.md │ ├── Geo_Distance_Aggregation.md │ ├── Global_Aggregation.md │ ├── Histogram_Aggregation.md │ ├── IP_Range_Aggregation.md │ ├── Missing_Aggregation.md │ ├── Nested_Aggregation.md │ ├── Range_Aggregation.md │ ├── Reverse_nested_Aggregation.md │ ├── Sampler_Aggregation.md │ ├── Significant_Terms_Aggregation.md │ └── Terms_Aggregation.md ├── Caching_heavy_aggregations.md ├── Matrix_Aggregations.md ├── Matrix_Aggregations │ └── Matrix_Stats.md ├── Metrics_Aggregations.md ├── Metrics_Aggregations │ ├── Avg_Aggregation.md │ ├── Cardinality_Aggregation.md │ ├── Extended_Stats_Aggregation.md │ ├── Geo_Bounds_Aggregation.md │ ├── Geo_Centroid_Aggregation.md │ ├── Max_Aggregation.md │ ├── Min_Aggregation.md │ ├── Percentile_Ranks_Aggregation.md │ ├── Percentiles_Aggregation.md │ ├── Scripted_Metric_Aggregation.md │ ├── Stats_Aggregation.md │ ├── Sum_Aggregation.md │ ├── Top_hits_Aggregation.md │ └── Value_Count_Aggregation.md ├── Pipeline_Aggregations.md ├── Pipeline_Aggregations │ ├── Avg_Bucket_Aggregation.md │ ├── Bucket_Script_Aggregation.md │ ├── Bucket_Selector_Aggregation.md │ ├── Cumulative_Sum_Aggregation.md │ ├── Derivative_Aggregation.md │ ├── Extended_Stats_Bucket_Aggregation.md │ ├── Max_Bucket_Aggregation.md │ ├── Min_Bucket_Aggregation.md │ ├── Moving_Average_Aggregation.md │ ├── Percentiles_Bucket_Aggregation.md │ ├── Serial_Differencing_Aggregation.md │ ├── Stats_Bucket_Aggregation.md │ └── Sum_Bucket_Aggregation.md └── Returning_only_aggregation_results.md ├── Analysis.md ├── Analysis ├── Analyzers.md ├── Analyzers │ ├── Configuring_built-in_analyzers.md │ ├── Custom_Analyzer.md │ ├── Fingerprint_Analyzer.md │ ├── Keyword_Analyzer.md │ ├── Language_Analyzers.md │ ├── Normalizers.md │ ├── Pattern_Analyzer.md │ ├── Simple_Analyzer.md │ ├── Standard_Analyzer.md │ ├── Stop_Analyzer.md │ └── Whitespace_Analyzer.md ├── Anatomy_of_an_analyzer.md ├── Character_Filters.md ├── Character_Filters │ ├── HTML_Strip_Char_Filter.md │ ├── Mapping_Char_Filter.md │ └── Pattern_Replace_Char_Filter.md ├── Testing_analyzers.md ├── Token_Filters.md ├── Token_Filters │ ├── ASCII_Folding_Token_Filter.md │ ├── Apostrophe_Token_Filter.md │ ├── CJK_Bigram_Token_Filter.md │ ├── CJK_Width_Token_Filter.md │ ├── Classic_Token_Filter.md │ ├── Common_Grams_Token_Filter.md │ ├── Compound_Word_Token_Filter.md │ ├── Decimal_Digit_Token_Filter.md │ ├── Delimited_Payload_Token_Filter.md │ ├── Edge_NGram_Token_Filter.md │ ├── Elision_Token_Filter.md │ ├── Fingerprint_Token_Filter.md │ ├── Flatten_Graph_Token_Filter.md │ ├── Hunspell_Token_Filter.md │ ├── KStem_Token_Filter.md │ ├── Keep_Types_Token_Filter.md │ ├── Keep_Words_Token_Filter.md │ ├── Keyword_Marker_Token_Filter.md │ ├── Keyword_Repeat_Token_Filter.md │ ├── Length_Token_Filter.md │ ├── Limit_Token_Count_Token_Filter.md │ ├── Lowercase_Token_Filter.md │ ├── Minhash_Token_Filter.md │ ├── NGram_Token_Filter.md │ ├── Normalization_Token_Filter.md │ ├── Pattern_Capture_Token_Filter.md │ ├── Pattern_Replace_Token_Filter.md │ ├── Phonetic_Token_Filter.md │ ├── Porter_Stem_Token_Filter.md │ ├── Reverse_Token_Filter.md │ ├── Shingle_Token_Filter.md │ ├── Snowball_Token_Filter.md │ ├── Standard_Token_Filter.md │ ├── Stemmer_Override_Token_Filter.md │ ├── Stemmer_Token_Filter.md │ ├── Stop_Token_Filter.md │ ├── Synonym_Graph_Token_Filter.md │ ├── Synonym_Token_Filter.md │ ├── Trim_Token_Filter.md │ ├── Truncate_Token_Filter.md │ ├── Unique_Token_Filter.md │ ├── Uppercase_Token_Filter.md │ └── Word_Delimiter_Token_Filter.md ├── Tokenizers.md └── Tokenizers │ ├── Classic_Tokenizer.md │ ├── Edge_NGram_Tokenizer.md │ ├── Keyword_Tokenizer.md │ ├── Letter_Tokenizer.md │ ├── Lowercase_Tokenizer.md │ ├── NGram_Tokenizer.md │ ├── Path_Hierarchy_Tokenizer.md │ ├── Pattern_Tokenizer.md │ ├── Standard_Tokenizer.md │ ├── Thai_Tokenizer.md │ ├── UAX_URL_Email_Tokenizer.md │ └── Whitespace_Tokenizer.md ├── Breaking_changes.md ├── Breaking_changes ├── Breaking_changes_in_5.0.md ├── Breaking_changes_in_5.0 │ ├── Aggregation_changes.md │ ├── Allocation_changes.md │ ├── CAT_API_changes.md │ ├── Document_API_changes.md │ ├── Filesystem_related_changes.md │ ├── HTTP_changes.md │ ├── Index_APIs_changes.md │ ├── Java_API_changes.md │ ├── Mapping_changes.md │ ├── Packaging.md │ ├── Path_to_data_on_disk.md │ ├── Percolator_changes.md │ ├── Plugin_changes.md │ ├── REST_API_changes.md │ ├── Script_related_changes.md │ ├── Search_and_Query_DSL_changes.md │ ├── Settings_changes.md │ └── Suggester_changes.md ├── Breaking_changes_in_5.1.md ├── Breaking_changes_in_5.2.md ├── Breaking_changes_in_5.3.md └── Breaking_changes_in_5 │ └── Shadow_Replicas_are_deprecated.md ├── Cluster_APIs.md ├── Cluster_APIs ├── Cluster_Allocation_Explain_API.md ├── Cluster_Health.md ├── Cluster_Reroute.md ├── Cluster_State.md ├── Cluster_Stats.md ├── Cluster_Update_Settings.md ├── Nodes_Info.md ├── Nodes_Stats.md ├── Nodes_hot_threads.md ├── Pending_cluster_tasks.md └── Task_Management_API.md ├── Document_APIS ├── Bulk_API.md ├── Delete_API.md ├── Delete_By_Query_API.md ├── Get_API.md ├── Index_API.md ├── Multi_Get_API.md ├── Multi_termvectors_API.md ├── Reading_and_Writing_documents.md ├── Reindex_API.md ├── Term_Vectors.md ├── Update_API.md ├── Update_By_Query_API.md └── refresh.md ├── Document_APIs.md ├── Getting_Started.md ├── Getting_Started ├── Basic_Concepts.md ├── Conclusion.md ├── Exploring_Your_Cluster.md ├── Exploring_Your_Cluster │ ├── Cluster_Health.md │ ├── Create_an_Index.md │ ├── Delete_an_Index.md │ ├── Index_and_Query_a_Document.md │ └── List_All_Indices.md ├── Exploring_Your_Data.md ├── Exploring_Your_Data │ ├── Executing_Aggregations.md │ ├── Executing_Filters.md │ ├── Executing_Searches.md │ ├── Introducing_the_Query_Language.md │ └── The_Search_API.md ├── Installation.md ├── Modifying_Your_Data.md └── Modifying_Your_Data │ ├── Batch_Processing.md │ ├── Deleting_Documents.md │ └── Updating_Documents.md ├── Glossary_of_terms.md ├── How_To.md ├── How_To ├── General_recommendations.md ├── Recipes.md ├── Tune_for_disk_usage.md ├── Tune_for_indexing_speed.md └── Tune_for_search_speed.md ├── Index_Modules.md ├── Index_Modules ├── Analysis.md ├── Index_Shard_Allocation.md ├── Index_Shard_Allocation │ ├── Delaying_allocation_when_a_node_leaves.md │ ├── Index_recovery_prioritization.md │ ├── Shard_Allocation_Filtering.md │ └── Total_Shards_Per_Node.md ├── Mapper.md ├── Merge.md ├── Similarity_module.md ├── Slow_Log.md ├── Store.md ├── Store │ └── Pre-loading_data_into_the_file_system_cache.md └── Translog.md ├── Indices_APIs.md ├── Indices_APIs ├── Analyze.md ├── Analyze │ └── Explain_Analyze.md ├── Clear_Cache.md ├── Create_Index.md ├── Delete_Index.md ├── Flush.md ├── Flush │ └── Synced_Flush.md ├── Force_Merge.md ├── Get_Field_Mapping.md ├── Get_Index.md ├── Get_Mapping.md ├── Get_Settings.md ├── Index_Aliases.md ├── Index_Templates.md ├── Indices_Exists.md ├── Indices_Recovery.md ├── Indices_Segments.md ├── Indices_Shard_Stores.md ├── Indices_Stats.md ├── Open_Close_Index_API.md ├── Put_Mapping.md ├── Refresh.md ├── Rollover_Index.md ├── Shadow_replica_indices.md ├── Shadow_replica_indices │ └── Node_level_settings_related_to_shadow_replicas.md ├── Shrink_Index.md ├── Types_Exists.md └── Update_Indices_Settings.md ├── Ingest_Node.md ├── Ingest_Node ├── Accessing_Data_in_Pipelines.md ├── Handling_Failures_in_Pipelines.md ├── Ingest_APIs.md ├── Ingest_APIs │ ├── Delete_Pipeline_API.md │ ├── Get_Pipeline_API.md │ ├── Put_Pipeline_API.md │ └── Simulate_Pipeline_API.md ├── Pipeline_Definition.md ├── Processors.md └── Processors │ ├── Append_Processor.md │ ├── Convert_Processor.md │ ├── Date_Index_Name_Processor.md │ ├── Date_Processor.md │ ├── Dot_Expander_Processor.md │ ├── Fail_Processor.md │ ├── Foreach_Processor.md │ ├── Grok_Processor.md │ ├── Gsub_Processor.md │ ├── JSON_Processor.md │ ├── Join_Processor.md │ ├── KV_Processor.md │ ├── Lowercase_Processor.md │ ├── Remove_Processor.md │ ├── Rename_Processor.md │ ├── Script_Processor.md │ ├── Set_Processor.md │ ├── Sort_Processor.md │ ├── Split_Processor.md │ ├── Trim_Processor.md │ └── Uppercase_Processor.md ├── Mapping.md ├── Mapping ├── Dynamic_Mapping.md ├── Dynamic_Mapping │ ├── Dynamic_field_mapping.md │ ├── Dynamic_templates.md │ ├── Override_default_template.md │ └── _default__mapping.md ├── Field_datatypes.md ├── Field_datatypes │ ├── Array_datatype.md │ ├── Binary_datatype.md │ ├── Boolean_datatype.md │ ├── Date_datatype.md │ ├── Geo-Shape_datatype.md │ ├── Geo-point_datatype.md │ ├── IP_datatype.md │ ├── Keyword_datatype.md │ ├── Nested_datatype.md │ ├── Numeric_datatypes.md │ ├── Object_datatype.md │ ├── Percolator_type.md │ ├── Range_datatypes.md │ ├── String_datatype.md │ ├── Text_datatype.md │ └── Token_count_datatype.md ├── Mapping_parameters.md ├── Mapping_parameters │ ├── analyzer.md │ ├── boost.md │ ├── coerce.md │ ├── copy_to.md │ ├── doc_values.md │ ├── dynamic.md │ ├── enabled.md │ ├── fielddata.md │ ├── fields.md │ ├── format.md │ ├── ignore_above.md │ ├── ignore_malformed.md │ ├── include_in_all.md │ ├── index.md │ ├── index_options.md │ ├── normalizer.md │ ├── norms.md │ ├── null_value.md │ ├── position_increment_gap.md │ ├── properties.md │ ├── search_analyzer.md │ ├── similarity.md │ ├── store.md │ └── term_vector.md ├── Meta-Fields.md └── Meta-Fields │ ├── _all_field.md │ ├── _field_names_field.md │ ├── _id_field.md │ ├── _index_field.md │ ├── _meta_field.md │ ├── _parent_field.md │ ├── _routing_field.md │ ├── _source_field.md │ ├── _type_field.md │ └── _uid_field.md ├── Modules.md ├── Modules ├── Cluster.md ├── Cluster │ ├── Cluster_Level_Shard_Allocation.md │ ├── Disk-based_Shard_Allocation.md │ ├── Miscellaneous_cluster_settings.md │ ├── Shard_Allocation_Awareness.md │ └── Shard_Allocation_Filtering.md ├── Cross_Cluster_Search.md ├── Discovery.md ├── Discovery │ ├── Azure_Classic_Discovery.md │ ├── EC2_Discovery.md │ ├── Google_Compute_Engine_Discovery.md │ └── Zen_Discovery.md ├── HTTP.md ├── Indices.md ├── Indices │ ├── Circuit_Breaker.md │ ├── Fielddata.md │ ├── Indexing_Buffer.md │ ├── Indices_Recovery.md │ ├── Node_Query_Cache.md │ └── Shard_request_cache.md ├── Local_Gateway.md ├── Network_Settings.md ├── Node.md ├── Plugins.md ├── Scripting.md ├── Scripting │ ├── Accessing_document_fields_and_special_variables.md │ ├── Advanced_text_scoring_in_scripts.md │ ├── Groovy_Scripting_Language.md │ ├── How_to_use_scripts.md │ ├── Lucene_Expressions_Language.md │ ├── Native_Java_Scripts.md │ ├── Painless_Debugging.md │ ├── Painless_Scripting_Language.md │ ├── Painless_Syntax.md │ └── Scripting_and_security.md ├── Snapshot_And_Restore.md ├── Thread_Pool.md ├── Transport.md └── Tribe_node.md ├── Query_DSL.md ├── Query_DSL ├── Compound_queries.md ├── Compound_queries │ ├── Bool_Query.md │ ├── Boosting_Query.md │ ├── Constant_Score_Query.md │ ├── Dis_Max_Query.md │ ├── Function_Score_Query.md │ └── Indices_Query.md ├── Full_text_queries.md ├── Full_text_queries │ ├── Common_Terms_Query.md │ ├── Match_Phrase_Prefix_Query.md │ ├── Match_Phrase_Query.md │ ├── Match_Query.md │ ├── Multi_Match_Query.md │ ├── Query_String_Query.md │ └── Simple_Query_String_Query.md ├── Geo_queries.md ├── Geo_queries │ ├── GeoShape_Query.md │ ├── Geo_Bounding_Box_Query.md │ ├── Geo_Distance_Query.md │ ├── Geo_Distance_Range_Query.md │ └── Geo_Polygon_Query.md ├── Joining_queries.md ├── Joining_queries │ ├── Has_Child_Query.md │ ├── Has_Parent_Query.md │ ├── Nested_Query.md │ └── Parent_Id_Query.md ├── Match_All_Query.md ├── Minimum_Should_Match.md ├── Multi_Term_Query_Rewrite.md ├── Query_and_filter_context.md ├── Span_queries.md ├── Span_queries │ ├── Span_Containing_Query.md │ ├── Span_Field_Masking_Query.md │ ├── Span_First_Query.md │ ├── Span_Multi_Term_Query.md │ ├── Span_Near_Query.md │ ├── Span_Not_Query.md │ ├── Span_Or_Query.md │ ├── Span_Term_Query.md │ └── Span_Within_Query.md ├── Specialized_queries.md ├── Specialized_queries │ ├── More_Like_This_Query.md │ ├── Percolate_Query.md │ ├── Script_Query.md │ └── Template_Query.md ├── Term_level_queries.md └── Term_level_queries │ ├── Exists_Query.md │ ├── Fuzzy_Query.md │ ├── Ids_Query.md │ ├── Prefix_Query.md │ ├── Range_Query.md │ ├── Regexp_Query.md │ ├── Term_Query.md │ ├── Terms_Query.md │ ├── Type_Query.md │ └── Wildcard_Query.md ├── README.md ├── Release_Notes.md ├── Release_Notes ├── 5.0.0-alpha1_Release_Notes.md ├── 5.0.0-alpha1_Release_Notes_Changes_previously_released_in_2.x.md ├── 5.0.0-alpha2_Release_Notes.md ├── 5.0.0-alpha3_Release_Notes.md ├── 5.0.0-alpha4_Release_Notes.md ├── 5.0.0-alpha5_Release_Notes.md ├── 5.0.0-beta1_Release_Notes.md ├── 5.0.0-rc1_Release_Notes.md ├── 5.0.0_Combined_Release_Notes.md ├── 5.0.0_GA_Release_Notes.md ├── 5.0.1_Release_Notes.md ├── 5.0.2_Release_Notes.md ├── 5.1.0_Release_Notes.md ├── 5.1.1_Release_Notes.md ├── 5.1.2_Release_Notes.md ├── 5.2.0_Release_Notes.md ├── 5.2.1_Release_Notes.md ├── 5.2.2_Release_Notes.md └── 5.3.0_Release_Notes.md ├── SUMMARY.md ├── Search_APIs.md ├── Search_APIs ├── Count_API.md ├── Explain_API.md ├── Field_stats_API.md ├── Multi_Search_API.md ├── Multi_Search_Template.md ├── Percolator.md ├── Profile_API.md ├── Profile_API │ ├── Profiling_Aggregations.md │ ├── Profiling_Considerations.md │ └── Profiling_Queries.md ├── Request_Body_Search.md ├── Request_Body_Search │ ├── Doc_value_Fields.md │ ├── Explain.md │ ├── Field_Collapsing.md │ ├── Fields.md │ ├── From_Size.md │ ├── Highlighting.md │ ├── Index_Boost.md │ ├── Inner_hits.md │ ├── Named_Queries.md │ ├── Post_filter.md │ ├── Preference.md │ ├── Query.md │ ├── Rescoring.md │ ├── Script_Fields.md │ ├── Scroll.md │ ├── Search_After.md │ ├── Search_Type.md │ ├── Sort.md │ ├── Source_filtering.md │ ├── Version.md │ └── min_score.md ├── Search.md ├── Search_Shards_API.md ├── Search_Template.md ├── Suggesters.md ├── Suggesters │ ├── Completion_Suggester.md │ ├── Context_Suggester.md │ ├── Phrase_Suggester.md │ └── Term_suggester.md ├── URI_Search.md └── Validate_API.md ├── Setup_Elasticsearch.md ├── Setup_Elasticsearch ├── Bootstrap_Checks.md ├── Bootstrap_Checks │ ├── Client_JVM_check.md │ ├── File_descriptor_check.md │ ├── G1GC_check.md │ ├── Heap_size_check.md │ ├── Maximum_map_count_check.md │ ├── Maximum_number_of_threads_check.md │ ├── Maximum_size_virtual_memory_check.md │ ├── Memory_lock_check.md │ ├── OnError_and_OnOutOfMemoryError_checks.md │ ├── System_call_filter_check.md │ └── Use_serial_collector_check.md ├── Configuring_Elasticsearch.md ├── Important_Elasticsearch_configuration.md ├── Important_System_Configuration.md ├── Important_System_Configuration │ ├── Configuring_system_settings.md │ ├── Disable_swapping.md │ ├── File_Descriptors.md │ ├── Number_of_threads.md │ ├── Set_JVM_heap_size_via_jvm.options.md │ └── Virtual_memory.md ├── Installing_Elasticsearch.md ├── Installing_Elasticsearch │ ├── Install_Elasticsearch_on_Windows.md │ ├── Install_Elasticsearch_with_.zip_or_.tar.gz.md │ ├── Install_Elasticsearch_with_Debian_Package.md │ ├── Install_Elasticsearch_with_Docker.md │ └── Install_Elasticsearch_with_RPM.md ├── Secure_Settings.md ├── Stopping_Elasticsearch.md ├── Upgrading_Elasticsearch.md └── Upgrading_Elasticsearch │ ├── Full_cluster_restart_upgrade.md │ ├── Reindex_to_upgrade.md │ └── Rolling_upgrades.md ├── Testing.md ├── Testing ├── Java_Testing_Framework.md └── Java_Testing_Framework │ ├── Assertions.md │ ├── Randomized_testing.md │ ├── Using_the_elasticsearch_test_classes.md │ ├── integration_tests.md │ ├── unit_tests.md │ └── why_randomized_testing.md ├── book.json ├── cat_APIs.md └── cat_APIs ├── cat_aliases.md ├── cat_allocation.md ├── cat_count.md ├── cat_fielddata.md ├── cat_health.md ├── cat_indices.md ├── cat_master.md ├── cat_nodeattrs.md ├── cat_nodes.md ├── cat_pending_tasks.md ├── cat_plugins.md ├── cat_recovery.md ├── cat_repositories.md ├── cat_segments.md ├── cat_shards.md ├── cat_snapshots.md ├── cat_templates.md └── cat_thread_pool.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | _book/ -------------------------------------------------------------------------------- /A._Painless_API_Reference.md: -------------------------------------------------------------------------------- 1 | # Painless API参考文档 2 | 3 | -------------------------------------------------------------------------------- /API_Conventions.md: -------------------------------------------------------------------------------- 1 | # API约定 2 | 3 | Elasticsearch REST APIs 是基于 HTTP 格式的,以 JSON 为数据交互格式的([JSON over HTTP](./Modules/HTTP.md))。 4 | 5 | 如果没有另外的说明,本章节中列出的约定可以应用于整个的 REST API 。 6 | 7 | * [多索引语法(Multiple Indices)](./API_Conventions/Multiple_Indices.md) 8 | * [索引库名称的日期运算(Date math support in index names)](./API_Conventions/Date_math_support_in_index_names.md) 9 | * [常用选项(Common options](./API_Conventions/Common_options.md) 10 | * [URL-based访问控制(URL-based access control)](./API_Conventions/URL-based_access_control.md) -------------------------------------------------------------------------------- /API_Conventions/Date_math_support_in_index_names.md: -------------------------------------------------------------------------------- 1 | # 索引库名称的日期运算 2 | 3 | 通过日期计算索引名称可以解决查询一个时间范围内的索引库,而不是通过别名来搜索所有连续时间的索引库来过滤得到结果。限制搜索的索引数量,减少了集群上的负载,并提高了执行性能。例如,如果您在日常日志中搜索错误信息),则可以使用日期计算名称模板将搜索限制为过去两天。 4 | 5 | 几乎所有的具有`index`参数的API,都支持通过日期计算`index`的参数值。 6 | 7 | 日期计算索引名称采用以下形式: 8 | 9 | ```js 10 | 11 | ``` 12 | 13 | 说明: 14 | 15 | 上式位置 | 含义说明 16 | ----------------|-------------------------- 17 | static_name | 是名称的静态文本部分 18 | date_math_expr | 是一个日期计算动态表达式,用来动态计算日期 19 | date_format | 是计算日期应呈现的格式参数,可选。默认是`YYYY.MM.dd` 20 | time_zone | 是可选的,时区。默认为`utc`。 21 | 22 | 你必须将索引名称与日期计算表达式包含在尖括号中,并且所有的特殊字符都应进行URI编码。例如: 23 | 24 | ```js 25 | # GET //_search 26 | GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search 27 | { 28 | "query" : { 29 | "match": { 30 | "test": "data" 31 | } 32 | } 33 | } 34 | ``` 35 | 36 | > 注意 37 | > 38 | > ## 日期运算符的URI编码 39 | > 40 | > 用于日期运算的特殊字符必须按照如下URI编码: 41 | > 42 | > 特殊字符 | 百分比编码 43 | > ---------|--------- 44 | > < | %3C 45 | > \> | %3E 46 | > / | %2F 47 | > { | %7B 48 | > } | %7D 49 | > \| | %7C 50 | > \+ | %2B 51 | > : | %3A 52 | 53 | 以下示例显示不同形式日期运算后的索引名称,它们在解析时给出的当前时间是`2024年3月22日中午`的utc时间。 54 | 55 | 表达式 | 解析结果 56 | ---------------------------------|-------------- 57 | |logstash-2024.03.22 58 | |logstash-2024.03.01 59 | |logstash-2024.03 60 | |logstash-2024.02 61 | |logstash-2024.03.23 62 | 63 | 如要在索引名称的静态部分中使用字符`{`和`}` ,使用`\`对其进行转义,例如: 64 | 65 | * ``将被解析为`elastic{ON}-2024.03.01` 66 | 67 | 下面的示例显示了一个搜索请求,在过去的三天里搜索LogStash索引,假设索引使用默认的索引名称格式, `logstash-YYYY.MM.dd`。 68 | 69 | ```js 70 | # GET /,,/_search 71 | GET /%3Clogstash-%7Bnow%2Fd-2d%7D%3E%2C%3Clogstash-%7Bnow%2Fd-1d%7D%3E%2C%3Clogstash-%7Bnow%2Fd%7D%3E/_search 72 | { 73 | "query" : { 74 | "match": { 75 | "test": "data" 76 | } 77 | } 78 | } 79 | ``` -------------------------------------------------------------------------------- /API_Conventions/Multiple_Indices.md: -------------------------------------------------------------------------------- 1 | # 多索引语法 2 | 3 | 大多数的API引用的`index`参数都支持在多个索引上执行,可以使用简单的`test1,test2,test3`表示形式(或者所有的索引`_all`)。它还支持通配符,例如:`test*`、`*test`、`te*t`或者`*test*`,和“添加” (`+`) 和 “删除”(`-`)的能力,例如:`+test*`,`-test3` 。 4 | 5 | 所有支持多索引的API都支持以下url查询参数: 6 | 7 | * `ignore_unavailable` 8 | 9 | 控制是否忽略任何指定的不可用的索引, 包括不存在的索引或者已关闭的索引。可以指定为`true`或者`false`。 10 | 11 | * `allow_no_indices` 12 | 13 | 控制在如果通配符索引表达式导致没有具体的索引时是否失败。可以指定为`true`或者`false`。例如,如果指定了通配符表达式`foo*`,并且没有以`foo`开头的索引,则根据此设置,请求将失败。此设置也适用于指定`_all` ,`*`或者没有指定索引的情况。此设置也适用于别名(aliases),一个场景就是别名指向了一个关闭的索引库。 14 | 15 | * `expand_wildcards` 16 | 17 | 控制通配符表达式扩展到什么样的具体索引。如果指定了`open`,则通配符表达式将扩展为仅打开的索引,如果指定`closed`,则通配符表达式仅扩展为已关闭的索引)。也可以指定为这两个值(`open,close`)以扩展到所有的索引。 18 | 19 | 如果`none`被指定,则通配符扩展将被禁用,如果`all`被指定,通配符表达式将扩展到所有索引(这相当于指定`open,closed`)。 20 | 21 | 上述参数的默认设置取决于所使用的api。 22 | 23 | > 注意 24 | > 25 | > 单个索引的API不支持多索引语法。例如[文档API](../Document_APIS.md)和[单个索引别名API](../Indices_APIs/Index_Aliases.md)。 -------------------------------------------------------------------------------- /API_Conventions/URL-based_access_control.md: -------------------------------------------------------------------------------- 1 | # URL-based访问控制 2 | 3 | 许多用户使用具有基于URL的访问控制的代理来安全地访问Elasticsearch索引库。对于[multi-search](../Search_APIs/Multi_Search_API.md)、[multi-get](../Document_APIS/Multi_Get_API.md)和 [bulk](../Document_APIS/Bulk_API.md)请求,用户可以选择在 URL中和请求主体中的每个单独请求上指定索引。这可能使基于URL的访问控制具有挑战性。 4 | 5 | 要防止用户用户覆盖在URL中指定的索引,请将此设置添加到`elasticsearch.yml`文件中: 6 | 7 | ```yaml 8 | rest.action.multi.allow_explicit_index: false 9 | ``` 10 | 11 | 默认值是`true`,但是设置为`false`时, Elasticsearch将拒绝在请求主体中指定了明确索引的请求。 12 | -------------------------------------------------------------------------------- /Aggregations.md: -------------------------------------------------------------------------------- 1 | # 聚合 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Aggregation_Metadata.md: -------------------------------------------------------------------------------- 1 | # Aggregation Metadata 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations.md: -------------------------------------------------------------------------------- 1 | # Bucket Aggregations 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Adjacency_Matrix_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Adjacency Matrix Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Children_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Children Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Date_Histogram_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Date Histogram Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Date_Range_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Date Range Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Diversified_Sampler_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Diversified Sampler Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Filter_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Filter Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Filters_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Filters Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/GeoHash_grid_Aggregation.md: -------------------------------------------------------------------------------- 1 | # GeoHash grid Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Geo_Distance_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Geo Distance Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Global_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Global Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Histogram_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Histogram Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/IP_Range_Aggregation.md: -------------------------------------------------------------------------------- 1 | # IP Range Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Missing_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Missing Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Nested_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Nested Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Range_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Range Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Reverse_nested_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Reverse nested Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Sampler_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Sampler Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Significant_Terms_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Significant Terms Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Bucket_Aggregations/Terms_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Terms Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Caching_heavy_aggregations.md: -------------------------------------------------------------------------------- 1 | # Caching heavy aggregations 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Matrix_Aggregations.md: -------------------------------------------------------------------------------- 1 | # Matrix Aggregations 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Matrix_Aggregations/Matrix_Stats.md: -------------------------------------------------------------------------------- 1 | # Matrix Stats 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations.md: -------------------------------------------------------------------------------- 1 | # Metrics Aggregations 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Avg_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Avg Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Cardinality_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Cardinality Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Extended_Stats_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Extended Stats Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Geo_Bounds_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Geo Bounds Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Geo_Centroid_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Geo Centroid Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Max_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Max Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Min_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Min Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Percentile_Ranks_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Percentile Ranks Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Percentiles_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Percentiles Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Scripted_Metric_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Scripted Metric Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Stats_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Stats Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Sum_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Sum Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Top_hits_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Top hits Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Metrics_Aggregations/Value_Count_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Value Count Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations.md: -------------------------------------------------------------------------------- 1 | # Pipeline Aggregations 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Avg_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Avg Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Bucket_Script_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Bucket Script Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Bucket_Selector_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Bucket Selector Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Cumulative_Sum_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Cumulative Sum Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Derivative_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Derivative Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Extended_Stats_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Extended Stats Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Max_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Max Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Min_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Min Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Moving_Average_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Moving Average Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Percentiles_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Percentiles Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Serial_Differencing_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Serial Differencing Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Stats_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Stats Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Pipeline_Aggregations/Sum_Bucket_Aggregation.md: -------------------------------------------------------------------------------- 1 | # Sum Bucket Aggregation 2 | 3 | -------------------------------------------------------------------------------- /Aggregations/Returning_only_aggregation_results.md: -------------------------------------------------------------------------------- 1 | # Returning only aggregation results 2 | 3 | -------------------------------------------------------------------------------- /Analysis.md: -------------------------------------------------------------------------------- 1 | # Analysis 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers.md: -------------------------------------------------------------------------------- 1 | # Analyzers 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Configuring_built-in_analyzers.md: -------------------------------------------------------------------------------- 1 | # Configuring built-in analyzers 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Custom_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Custom Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Fingerprint_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Fingerprint Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Keyword_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Keyword Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Language_Analyzers.md: -------------------------------------------------------------------------------- 1 | # Language Analyzers 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Normalizers.md: -------------------------------------------------------------------------------- 1 | # Normalizers 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Pattern_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Pattern Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Simple_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Simple Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Standard_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Standard Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Stop_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Stop Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Analyzers/Whitespace_Analyzer.md: -------------------------------------------------------------------------------- 1 | # Whitespace Analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Anatomy_of_an_analyzer.md: -------------------------------------------------------------------------------- 1 | # Anatomy of an analyzer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Character_Filters.md: -------------------------------------------------------------------------------- 1 | # Character Filters 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Character_Filters/HTML_Strip_Char_Filter.md: -------------------------------------------------------------------------------- 1 | # HTML Strip Char Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Character_Filters/Mapping_Char_Filter.md: -------------------------------------------------------------------------------- 1 | # Mapping Char Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Character_Filters/Pattern_Replace_Char_Filter.md: -------------------------------------------------------------------------------- 1 | # Pattern Replace Char Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Testing_analyzers.md: -------------------------------------------------------------------------------- 1 | # Testing analyzers 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters.md: -------------------------------------------------------------------------------- 1 | # Token Filters 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/ASCII_Folding_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # ASCII Folding Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Apostrophe_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Apostrophe Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/CJK_Bigram_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # CJK Bigram Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/CJK_Width_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # CJK Width Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Classic_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Classic Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Common_Grams_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Common Grams Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Compound_Word_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Compound Word Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Decimal_Digit_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Decimal Digit Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Delimited_Payload_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Delimited Payload Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Edge_NGram_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Edge NGram Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Elision_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Elision Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Fingerprint_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Fingerprint Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Flatten_Graph_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Flatten Graph Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Hunspell_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Hunspell Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/KStem_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # KStem Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Keep_Types_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Keep Types Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Keep_Words_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Keep Words Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Keyword_Marker_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Keyword Marker Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Keyword_Repeat_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Keyword Repeat Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Length_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Length Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Limit_Token_Count_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Limit Token Count Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Lowercase_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Lowercase Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Minhash_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Minhash Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/NGram_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # NGram Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Normalization_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Normalization Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Pattern_Capture_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Pattern Capture Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Pattern_Replace_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Pattern Replace Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Phonetic_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Phonetic Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Porter_Stem_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Porter Stem Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Reverse_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Reverse Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Shingle_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Shingle Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Snowball_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Snowball Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Standard_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Standard Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Stemmer_Override_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Stemmer Override Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Stemmer_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Stemmer Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Stop_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Stop Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Synonym_Graph_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Synonym Graph Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Synonym_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Synonym Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Trim_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Trim Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Truncate_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Truncate Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Unique_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Unique Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Uppercase_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Uppercase Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Token_Filters/Word_Delimiter_Token_Filter.md: -------------------------------------------------------------------------------- 1 | # Word Delimiter Token Filter 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers.md: -------------------------------------------------------------------------------- 1 | # Tokenizers 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Classic_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Classic Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Edge_NGram_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Edge NGram Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Keyword_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Keyword Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Letter_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Letter Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Lowercase_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Lowercase Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/NGram_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # NGram Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Path_Hierarchy_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Path Hierarchy Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Pattern_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Pattern Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Standard_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Standard Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Thai_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Thai Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/UAX_URL_Email_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # UAX URL Email Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Analysis/Tokenizers/Whitespace_Tokenizer.md: -------------------------------------------------------------------------------- 1 | # Whitespace Tokenizer 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes.md: -------------------------------------------------------------------------------- 1 | # 重大变更 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0.md: -------------------------------------------------------------------------------- 1 | # 5.0重大变更 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Aggregation_changes.md: -------------------------------------------------------------------------------- 1 | # Aggregation变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Allocation_changes.md: -------------------------------------------------------------------------------- 1 | # Allocation变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/CAT_API_changes.md: -------------------------------------------------------------------------------- 1 | # CAT API变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Document_API_changes.md: -------------------------------------------------------------------------------- 1 | # Document API变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Filesystem_related_changes.md: -------------------------------------------------------------------------------- 1 | # 文件系统相关变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/HTTP_changes.md: -------------------------------------------------------------------------------- 1 | # HTTP变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Index_APIs_changes.md: -------------------------------------------------------------------------------- 1 | # Index API变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Java_API_changes.md: -------------------------------------------------------------------------------- 1 | # JAVA API变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Mapping_changes.md: -------------------------------------------------------------------------------- 1 | # Mapping变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Packaging.md: -------------------------------------------------------------------------------- 1 | # 安装包 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Path_to_data_on_disk.md: -------------------------------------------------------------------------------- 1 | # 磁盘数据文件路径 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Percolator_changes.md: -------------------------------------------------------------------------------- 1 | # Percolator变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Plugin_changes.md: -------------------------------------------------------------------------------- 1 | # 插件变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/REST_API_changes.md: -------------------------------------------------------------------------------- 1 | # REST API变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Script_related_changes.md: -------------------------------------------------------------------------------- 1 | # 脚本相关变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Search_and_Query_DSL_changes.md: -------------------------------------------------------------------------------- 1 | # 搜索与查询DSL变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Settings_changes.md: -------------------------------------------------------------------------------- 1 | # Settings变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.0/Suggester_changes.md: -------------------------------------------------------------------------------- 1 | # Suggester变化 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.1.md: -------------------------------------------------------------------------------- 1 | # 5.1重大变更 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.2.md: -------------------------------------------------------------------------------- 1 | # 5.2重大变更 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5.3.md: -------------------------------------------------------------------------------- 1 | # 5.3重大变更 2 | 3 | -------------------------------------------------------------------------------- /Breaking_changes/Breaking_changes_in_5/Shadow_Replicas_are_deprecated.md: -------------------------------------------------------------------------------- 1 | # 删除Shadow副本 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs.md: -------------------------------------------------------------------------------- 1 | # 集群API 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Cluster_Allocation_Explain_API.md: -------------------------------------------------------------------------------- 1 | # Cluster Allocation Explain API 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Cluster_Health.md: -------------------------------------------------------------------------------- 1 | # Cluster Health 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Cluster_Reroute.md: -------------------------------------------------------------------------------- 1 | # Cluster Reroute 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Cluster_State.md: -------------------------------------------------------------------------------- 1 | # Cluster State 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Cluster_Stats.md: -------------------------------------------------------------------------------- 1 | # Cluster Stats 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Cluster_Update_Settings.md: -------------------------------------------------------------------------------- 1 | # Cluster Update Settings 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Nodes_Info.md: -------------------------------------------------------------------------------- 1 | # Nodes Info 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Nodes_Stats.md: -------------------------------------------------------------------------------- 1 | # Nodes Stats 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Nodes_hot_threads.md: -------------------------------------------------------------------------------- 1 | # Nodes hot_threads 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Pending_cluster_tasks.md: -------------------------------------------------------------------------------- 1 | # Pending cluster tasks 2 | 3 | -------------------------------------------------------------------------------- /Cluster_APIs/Task_Management_API.md: -------------------------------------------------------------------------------- 1 | # Task Management API 2 | 3 | 4 | ## 取消任务 5 | -------------------------------------------------------------------------------- /Document_APIS/Delete_API.md: -------------------------------------------------------------------------------- 1 | # Delete API(删除接口) 2 | 3 | delete API允许基于指定的ID来从索引库中删除一个JSON文件。下面演示了从一个叫`twitter`的索引库的`tweet` type下删除文档,`id`是`1`: 4 | 5 | ```bash 6 | $ curl -XDELETE 'http://localhost:9200/twitter/tweet/1' 7 | ``` 8 | 9 | 上述删除操作的结果是: 10 | 11 | ```js 12 | { 13 | "_shards" : { 14 | "total" : 10, 15 | "failed" : 0, 16 | "successful" : 10 17 | }, 18 | "found" : true, 19 | "_index" : "twitter", 20 | "_type" : "tweet", 21 | "_id" : "1", 22 | "_version" : 2, 23 | "result": "deleted" 24 | } 25 | ``` 26 | 27 | ## 版本 28 | 29 | 索引的每个文档都被标记了版本。当删除文档时, 可以通过指定`version`来确保我们试图删除一个实际上已被删除的文档时,它在此期间并没有改变。在文档中执行的每个写入操作,包括删除,都会使其版本递增。 30 | 31 | ## 路由 32 | 33 | 在创建索引文档时如果使用了控制路由的能力,为了删除文档,也应当提供路由值。例如: 34 | 35 | ```bash 36 | $ curl -XDELETE 'http://localhost:9200/twitter/tweet/1?routing=kimchy' 37 | ``` 38 | 39 | 以上将删除ID为1的tweet,但会根据用户路由。请注意,如果删除路由值不正确,会导致文档无法删除。 40 | 41 | 当映射的`_routing`被设定为`required`且没有指定的路由值时,删除API将抛出`RoutingMissingException`并拒绝该请求。 42 | 43 | ## Parent 44 | 45 | `parent`参数可以被设置,这将基本上与设定路由参数是相同的。 46 | 47 | 请注意,删除父文档不会自动删除其子文档。根据给定的父文档ID删除所有子文件的一种方法是,通过在创建文档索引时自动生成的`_parent`字段来使用[根据查询条件删除API](./Delete_By_Query_API.md)进行删除,它的格式是`parent_type#parent_id`。 48 | 49 | 当删除子文档,必须指定其父ID,否则该删除请求将被拒绝和抛出一个`RoutingMissingException`异常。 50 | 51 | ## 自动创建索引 52 | 53 | 如果索引库之前没有创建,删除操作将自动创建一个索引库(参见[创建索引API](../Indices_APIs/Create_Index.md)来手动创建索引),并且如果没有创建类型时,会根据指定的类型名与动态映射类型来自动创建类型(参见[put mapping](../Indices_APIs/Put_Mapping.md)来手动创建类型映射)。 54 | 55 | ## 分布式 56 | 57 | 删除操作被散列到一个特定的分片id。然后它被重定向到该ID组内的主分片,和副本分片(如果需要的话)。 58 | 59 | ## 等待活动分片 60 | 61 | 当进行的删除请求,你可以设置`wait_for_active_shards`参数来要求必须最少达到几个可用的分片才能开始处理删除请求。进一步的细节和使用示例见[这里](./Index_API.md#index-wait-for-active-shards)。 62 | 63 | ## 刷新 64 | 65 | 用来控制本次的变化能够被搜索可见。参见:[refresh](./refresh.md)。 66 | 67 | ## 超时 68 | 69 | 在执行删除操作时,分配给执行删除操作的主分片可能无法使用。有些方面的原因可能是主分片正在从仓库恢复或进行搬迁。默认情况下,删除操作在返回失败与错误之前将等待1分钟让主分片成为可用的。该`timeout`参数可用于明确指定等待多长时间。这里是将其设置为5分钟的一个示例: 70 | 71 | ```bash 72 | $ curl -XDELETE 'http://localhost:9200/twitter/tweet/1?timeout=5m' 73 | ``` -------------------------------------------------------------------------------- /Document_APIS/Multi_termvectors_API.md: -------------------------------------------------------------------------------- 1 | # Multi termvectors API 2 | 3 | Multi termvectors API允许一次获得多个词条向量。检索词条向量的文档由索引 4 | 、类型和ID指定。但文件也可以在请求本身中人为地提供。 响应包括一个具有所有获取的术语的`docs`数组,每个元素具有由[termvectors](./Term_Vectors.md) API提供的结构。这是一个例子: 5 | 6 | ```js 7 | POST /_mtermvectors 8 | { 9 | "docs": [ 10 | { 11 | "_index": "twitter", 12 | "_type": "tweet", 13 | "_id": "2", 14 | "term_statistics": true 15 | }, 16 | { 17 | "_index": "twitter", 18 | "_type": "tweet", 19 | "_id": "1", 20 | "fields": [ 21 | "message" 22 | ] 23 | } 24 | ] 25 | } 26 | ``` 27 | 28 | 有关可能的参数的描述,请参阅[termvectors](./Term_Vectors.md) API。 29 | 30 | `_mtermvectors`端点也可以针对索引使用(在这种情况下,它不需要在主体中): 31 | 32 | ```js 33 | POST /twitter/_mtermvectors 34 | { 35 | "docs": [ 36 | { 37 | "_type": "tweet", 38 | "_id": "2", 39 | "fields": [ 40 | "message" 41 | ], 42 | "term_statistics": true 43 | }, 44 | { 45 | "_type": "tweet", 46 | "_id": "1" 47 | } 48 | ] 49 | } 50 | ``` 51 | 52 | 以及类型: 53 | 54 | ```js 55 | POST /twitter/tweet/_mtermvectors 56 | { 57 | "docs": [ 58 | { 59 | "_id": "2", 60 | "fields": [ 61 | "message" 62 | ], 63 | "term_statistics": true 64 | }, 65 | { 66 | "_id": "1" 67 | } 68 | ] 69 | } 70 | ``` 71 | 72 | 如果所有请求的文档都在相同的索引并且具有相同的类型,并且参数是相同的,则可以简化请求: 73 | 74 | ```js 75 | POST /twitter/tweet/_mtermvectors 76 | { 77 | "ids" : ["1", "2"], 78 | "parameters": { 79 | "fields": [ 80 | "message" 81 | ], 82 | "term_statistics": true 83 | } 84 | } 85 | ``` 86 | 87 | 此外,就像对于[termvectors](./Term_Vectors.md) API一样,可以为用户提供的文档生成词条向量。所使用的映射由`_index`和`_type`确定。 88 | 89 | ```js 90 | POST /_mtermvectors 91 | { 92 | "docs": [ 93 | { 94 | "_index": "twitter", 95 | "_type": "tweet", 96 | "doc" : { 97 | "user" : "John Doe", 98 | "message" : "twitter test test test" 99 | } 100 | }, 101 | { 102 | "_index": "twitter", 103 | "_type": "test", 104 | "doc" : { 105 | "user" : "Jane Doe", 106 | "message" : "Another twitter test ..." 107 | } 108 | } 109 | ] 110 | } 111 | ``` -------------------------------------------------------------------------------- /Document_APIS/refresh.md: -------------------------------------------------------------------------------- 1 | # ?refresh (冲刷) 2 | 3 | [Index](./Index_API.md)、[Update](./Update_API.md)、[Delete](./Delete_API.md)和[Bulk](./Bulk_API.md)API支持设置`refresh`以控制此请求所做的更改对搜索可见。这些是允许的值: 4 | 5 | 空字符串或`true` 6 | 7 |   在操作发生后立即刷新相关的主要和副本分片(不是整个索引),以便更新的文档立即显示在搜索结果中。只有仔细思考和验证才能从索引和搜索的角度出发,不会导致性能不佳。 8 | 9 | `wait_for` 10 | 11 |   等待请求所做的更改在返回之前通过冲刷显示。这不会强制立即刷新,而是等待刷新发生。 Elasticsearch会自动每隔`index.refresh_interval`刷新已经更改的分片,默认为`1`秒。该设置是[动态](../Index_Modules.md#dynamic-index-settings)的。调用[Refresh](../Indices_APIs/Refresh.md) API或将任何支持该API的`refresh`设置为`true`也将导致刷新,从而导致已经运行的请求与`refresh=wait_for`返回。 12 | 13 | 假(默认) 14 | 15 |   不要刷新相关的动作。在请求返回后,此请求所做的更改将在某个时刻显示。 16 | 17 | ## 选择哪个设置来使用 18 | 19 | 除非你有一个很好的理由等待修改变得可见,总是使用`refresh=false`,或者,因为这是默认值,只需将刷新参数退出URL。那是最简单和最快的选择。 20 | 21 | 如果你一定要让所做的修改请求同步可见,那么您必须在对Elasticsearch(true)进行更多的负载与更长的等待响应(`wait_for`)之间进行选择。这里有几点应该告诉这个决定: 22 | 23 | - 与设置为`true`相比,`wait_for`能让索引做更多的变更工作,在这种情况下,每隔`index.refresh_interval`索引的修改只才会保存。 24 | - `true`将构造较小的有效的索引(微小段),以后必须将其合并到更有效的索引构造(较大的段)中。这意味着设置为`true`时,索引将花费时间在创建微小段上面,在搜索时从微小段进行搜索,并在合并时来制作较大段。 25 | - 不要在一行中启动多个`refresh=wait_for`请求。而是通过一个Bulk请求来使用`refresh=wait_for`,Elasticsearch将并行执行它们,并且只有当它们全部完成时才返回。 26 | - 如果刷新间隔设置为`-1`,则禁用了自动刷新,则`refresh=wait_for`的请求将无限期地等待,直到某些其它操作导致刷新。相反,将`index.refresh_interval`设置为小于默认值譬如`200ms`,`refresh=wait_for`更快地恢复,但仍会生成低效的段。 27 | - `refresh=wait_for`仅影响其所在的请求,但是,通过强制立即刷新,`refresh=true`将影响其他正在进行的请求。一般来说,如果你有一个运行的系统,你不想打扰,那么`refresh=wait_for`是一个较小的修改。 28 | 29 | ## `refresh=wait_for`能强制刷新 30 | 31 | 如果一个`refresh=wait_for`请求进来,当已经有`index.max_refresh_listeners`(默认为`1000`)请求在等待该分片上的刷新时,那么该请求的行为就好像`refresh`设置为`true`:它将强制刷新。这保证了当`refresh=wait_for`请求返回其更改对于搜索是可见的时候,同时防止阻止请求的未检查的资源使用。如果一个请求被强制刷新,因为它超出监听器插槽,则其响应将包含`"forced_refresh":true`。 32 | 33 | Bulk请求只占用接触的每个分片上的一个`slot`,无论他们修改分片多少次。 34 | 35 | ## 示例 36 | 37 | 这些将创建一个文档并立即刷新索引,使其可见: 38 | 39 | ```js 40 | PUT /test/test/1?refresh 41 | {"test": "test"} 42 | PUT /test/test/2?refresh=true 43 | {"test": "test"} 44 | ``` 45 | 46 | 这些将创建一个文档,而不做任何使其可以搜索的事情: 47 | 48 | ```js 49 | PUT /test/test/3 50 | {"test": "test"} 51 | PUT /test/test/4?refresh=false 52 | {"test": "test"} 53 | ``` 54 | 55 | 这将创建一个文档并等待它成为搜索可见: 56 | 57 | ```js 58 | PUT /test/test/4?refresh=wait_for 59 | {"test": "test"} 60 | ``` -------------------------------------------------------------------------------- /Document_APIs.md: -------------------------------------------------------------------------------- 1 | # 文档API 2 | 3 | 本节开始将简短的介绍Elasticsearch的[数据复制模型],将通过下面的CRUD API来更详细描述: 4 | 5 | ## 单文档API 6 | 7 | * [Index API](./Document_APIS/Index_API.md) 8 | * [Get API](./Document_APIS/Get_API.md) 9 | * [Delete API](./Document_APIS/Delete_API.md) 10 | * [Update API](./Document_APIS/Update_API.md) 11 | 12 | ## 多文档API 13 | 14 | * [Multi Get API](./Document_APIS/Multi_Get_API.md) 15 | * [Bulk API](./Document_APIS/Bulk_API.md) 16 | * [Delete By Query API](./Document_APIS/Delete_By_Query_API.md) 17 | * [Update By Query API](./Document_APIS/Update_By_Query_API.md) 18 | * [Reindex API](./Document_APIS/Reindex_API.md) 19 | 20 | > 注意 21 | > 22 | > 所有的单文档的CRUD API,`index`参数只能接受单一的索引库名称,或者是一个指向单一索引库的`alias`。 -------------------------------------------------------------------------------- /Getting_Started.md: -------------------------------------------------------------------------------- 1 | # 入门 2 | 3 | Elasticsearch 是一个高度可扩展且开源的全文检索和分析引擎。它可以让您快速且近实时地存储、检索以及分析海量数据。它通常用作那些具有复杂搜索功能和需求的应用的底层引擎或者技术。 4 | 5 | 下面是 Elasticsearch 一些简单的使用案例: 6 | 7 | * 您运行一个在线网络商城,允许用户搜索你在售的商品。在这种情况下,您可以使用 Elasticsearch 来存储您的整个商品的目录和库存,并且为他们提供搜索和自动完成的建议。 8 | * 您想要去收集日志或交易数据,并且您还想要去分析和挖掘这些数据来找出趋势、统计、概述、或者异常。在这种情况下,您可以使用 Logstash(Elasticsearch/Logstash/Kibana 技术栈中的一部分)来收集、聚合、以及解析数据,然后让 Logstash 发送这些数据到 Elasticsearch。如果这些数据存在于 Elasticsearch 中,那么您就可以通过执行搜索和聚合来挖掘出任何您感兴趣的信息。 9 | * 您运行一个价格预警平台,它允许客户指定精确的价格,如“我指定感兴趣的电子产品,如果任何供应商该产品的价格在未来一个月内低于 $X 这个价钱的话我应该被通知到”。在这种情况下,您可以收集供应商的价格,推送它们到 Elasticsearch 中去,然后使用 reverse-search(Percolator)(反向搜索(过滤器))功能以匹配客户查询价格的变动,最后如果发现匹配成功就给客户发出通知。 10 | * 您有一些分析/商业智能的需求,并希望快速的研究、分析、可视化,并且需要 ad-hoc(即席查询)海量数据(像数百万或者数十亿条记录)上的问题。在这种情况下,您可以使用 Elasticsearch 来存储数据,然后使用 Kibana(Elasticsearch/Logstash/Kibana 技术栈中的一部分)以建立一个能够可视化的对您很重要的数据的定制的 dashboards(面板)。此外,您还可以使用 Elasticsearch 的聚合功能对您的数据执行复杂的商业智能查询。 11 | 12 | 对于本教程的其余部分,我将引导您完成 Elasticsearch 的启动和运行的过程,同时了解其原理,并执行像 indexing(索引),searching(查询)和 modifing(修改)数据的基础操作。在本教程的最后一部分,您应该可以清楚的了解到 Elasticsearch 是什么,它是如何工作的,并有希望获得启发。看您如何使用它来构建复杂的搜索应用程序或者从数据中挖掘出想要的信息。 -------------------------------------------------------------------------------- /Getting_Started/Basic_Concepts.md: -------------------------------------------------------------------------------- 1 | # 基本概念 2 | 3 | Elasticsearch有几个核心概念。开始学习Elasticsearch之前理解这些概念会对整个学习过程有很大的帮助。 4 | 5 | ## 接近实时(NRT) 6 | 7 | Elasticsearch是一个近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是一秒)。 8 | 9 | ## 集群(cluster) 10 | 11 | 一个集群就是由一个或多个节点组织在一起, 它们共同持有你全部的数据, 并一起提供索引和搜索功能。 一个集群由一个唯一的名字标识, 这个名字默认就是“elasticsearch”。 这个名字很重要, 因为一个节点只能通过指定某个集群的名字来加入这个集群。 12 | 13 | 请确保您在不同环境中不要重复使用相同的集群名字,否则您最终可能会将节点加入到了错误的集群中。譬如你可以使用`logging-dev`、`logging-stage`、`logging-prod`来作为开发、演示、生产环境的集群名。 14 | 15 | 注意,一个集群中只包含一个节点也是合法的。另外,你也可以拥有多个集群,只需确保集群的名字唯一。 16 | 17 | ## 节点(node) 18 | 19 | 一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。 和集群类似, 一个节点也是由一个名字来标识的, 默认情况下, 在节点启动时会随机分配一个全局唯一标示来作为它的名字,如果你不希望是默认的你也可以自己指定。这个名字在集群管理时很重要,因为在管理过程中,你希望根据这个名称去确定网络中的服务器对应的是Elasticsearch集群中的哪个节点。 20 | 21 | 一个节点可以通过配置集群名称来加入一个指定的集群。 默认情况下,每个节点都会被安排加入到一个叫做`elasticsearch`的集群中,这意味着,如果你在你的网络中启动了若干个节点, 并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做`elasticsearch`的集群中。 22 | 23 | 在一个集群里可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做`elasticsearch`的单节点集群。 24 | 25 | ## 索引库(index) 26 | 27 | 一个索引库就是一些拥有相似特征文档的集合。例如,你可以有一个会员数据的索引库,一个商品目录的索引库,还有一个订单数据的索引库。一个索引库由一个名字来标识(必须全部是小写字母的),在对 document(文档)执行 indexing(索引),search(搜索),update(更新)和 delete(删除)动作时都需要通过此名字来操作。 28 | 29 | ## 类型(type) 30 | 31 | 在一个索引中你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组相同字段的文档定义一个类型。例如,假设你运行一个博客平台,并且将你所有的数据存储到一个索引库中。在这个索引库中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。 32 | 33 | ## 文档(document) 34 | 35 | 文档是索引信息的基本单位。。理由,你可以拥有某一个会员文档、一个商品文档、一个订单文档。文档以[JSON](http://json.org/)格式来表示,[JSON](http://json.org/)是一个到处存在的互联网数据交互格式。 36 | 37 | 在一个索引库或类型里面,你可以存储任意多的文档。注意,一个文档物理上存在于一个索引库之中,但文档必须被编入或分配到一个索引库的类型。 38 | 39 | ## 分片和副本(shards and replicas) 40 | 41 | 一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引库需要占据1TB的磁盘空间,他将不可能存储在单一节点、或者处理搜索请求响应会非常慢。 42 | 43 | 为了解决这个问题,Elasticsearch提供了将索引库划分成多个分片的能力。当你创建一个索引库的时候,你可以指定你想要的分片的数量。每个分片本身也是一个全功能且独立的“索引”,这个“索引” 可以被放置到集群中的任何节点上。 44 | 45 | 分片之所以重要,主要有两方面的原因: 46 | 47 | * 允许你水平的拆分与扩展容量 48 | * 允许你在分片(位于多个节点上)之间进行分布式的、并行的操作,进而提高性能与吞吐量 49 | 50 | 至于分片怎样分布、搜索请求时它的文档怎样聚合返回,完全由Elasticsearch管理,对于用户来说这些都是透明的。 51 | 52 | 在一个网络或云的环境里异常时可预见的。在分片或节点因为某些原因处于离线状态或者消失的情况下,故障转移机制是非常有用且强烈推荐的。为此,Elasticsearch允许你为分片创建一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本。 53 | 54 | 副本之所以重要,有两个主要原因: 55 | 56 | * 在分片/节点失败的情况下,副本提供了高可用性。基于整个原因,副本分片不要与原分片或主要分片存放在同一节点上是非常重要的。 57 | * 因为搜索可以在所有的副本上并行运行,副本可以扩展你的搜索量或吞吐量。 58 | 59 | 总之,每个索引库可以被分成多个分片。一个索引也可以被复制0次(即没有副本) 或多次。一旦复制了,每个索引就有了主分片(作为复制源的分片)和副本分片(主分片的拷贝)。 分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你不能再改变分片的数量。 60 | 61 | 默认情况下,Elasticsearch中的每个索引分配5个主分片和1个副本。这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个全量拷贝),这样每个索引总共就有10个分片。 62 | 63 | > 注意 64 | > 65 | > 每个Elasticsearch的分片都是一个独立的Lucene索引。在单个 Lucene 索引中有一个最大的文档数量限制。从[LUCENE-5843](https://issues.apache.org/jira/browse/LUCENE-5843)的时候开始,该限制为 2,147,483,519(=Interger.MAX_VALUE - 128)个文档。您可以使用 [_cat/shards](https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-shards.html)api来监控分片大小。 66 | 67 | 理解了这些基础概念之后,让我们开始接触更有趣的部分...... -------------------------------------------------------------------------------- /Getting_Started/Conclusion.md: -------------------------------------------------------------------------------- 1 | # 总结 2 | 3 | Elasticsearch既是一个简单也是一个复杂的产品。到目前为止,我们已经基本学会了它是什么、以及如何使用一些REST API来进行工作。我们希望这个教程帮助你更好的理解什么是Elasticsearch,更重要的是它能激发你进一步的去尝试其它更多的特性。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Cluster.md: -------------------------------------------------------------------------------- 1 | # 探索集群 2 | 3 | ## rest 接口 4 | 5 | 现在我们已经有一个正常运行的节点(和集群),下一步就是要去理解怎样与其通信。幸运的是,Elasticsearch提供了非常全面和强大的REST API,利用这个REST API你可以同你的集群交互。下面是利用这个API,可以做的几件事情: 6 | 7 | - 检查你的集群、节点和索引库的健康状态和各种统计信息 8 | - 管理你的集群、节点、索引数据和元数据 9 | - 对你的索引库进行CRUD(创建、读取、更新和删除)和搜索操作 10 | - 执行高级的搜索操作, 像是分页、排序、过滤、脚本编写(scripting)、聚合(aggregations)等其它操作 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Cluster/Cluster_Health.md: -------------------------------------------------------------------------------- 1 | # 集群健康(cluster health) 2 | 3 | 让我们以基本的健康检查作为开始,我们可以利用它来查看我们集群的状态。我们使用curl,当然你也可以使用任何可以创建HTTP/REST调用的工具,来使用该功能。 4 | 我们假设我们还在我们启动Elasticsearch的节点上并打开另外一个终端窗口。 5 | 6 | 要检查集群健康,我们将使用[_cat API](../../cat_APIs.md)。您可以在[Kibana’s Console](https://www.elastic.co/guide/en/kibana/master/console-kibana.html)点击 “VIEW IN CONSOLE” 或者点击 “COPY AS CURL” 链接然后粘贴到终端中使用 `curl` 中运行命令: 7 | 8 | ```js 9 | curl '/_cat/health?v' 10 | ``` 11 | 12 | 相应的响应是: 13 | 14 | ```js 15 | epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 16 | 1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0% 17 | ``` 18 | 19 | 可以看到,我们集群的名字是“elasticsearch”,正常运行,并且状态是绿色。 20 | 21 | 当我们查看集群状态的时候,我们可能得到绿色、黄色或红色三种状态。绿色代表一切正常(集群功能齐全);黄色意味着所有的数据都是可用的,但是某些副本没有被分配(集群功能齐全);红色则代表因为某些原因,某些数据不可用。注意,即使是集群状态是红色的,集群仍然是部分可用的(它仍然会利用可用的分片来响应搜索请求),但是可能你需要尽快修复它,因为你有丢失的数据。 22 | 23 | 从上面的响应中,我们可以看到 一共有一个节点,由于里面没有数据,我们有0个分片。注意,由于我们使用默认的集群名字(elasticsearch),并且由于Elasticsearch默认使用网络单播(unicast)发现同一机器上的其它节点,有可能您不小心在您的电脑上启动了多个节点,然后它们全部加入到了单个集群。在这种情形下,你可能在上面的响应中看到多个节点。 24 | 25 | 我们也可以获得节集群中的节点列表: 26 | 27 | ```js 28 | curl '/_cat/nodes?v' 29 | ``` 30 | 31 | 对应的响应是: 32 | 33 | ```js 34 | ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 35 | 127.0.0.1 10 5 5 4.46 mdi * PB2SGZY 36 | ``` 37 | 38 | 这儿, 我们可以看到叫“PB2SGZY”的节点,这个节点是我们集群中的唯一节点。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Cluster/Create_an_Index.md: -------------------------------------------------------------------------------- 1 | # 创建一个索引库 2 | 3 | 现在让我们创建一个叫做“customer” 的索引,然后再列出所有的索引: 4 | 5 | ```js 6 | PUT /customer?pretty 7 | GET /_cat/indices?v 8 | ``` 9 | 10 | 第一个命令使用PUT创建了一个叫做“customer” 的索引。我们简单地将`pretty`附加到调用的尾部,使其以美观的形式打印出JSON响应。 11 | 12 | 响应如下: 13 | 14 | ```js 15 | health status index uuid pri rep docs.count docs.deleted store.size pri.store.size 16 | yellow open customer 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b 17 | ``` 18 | 19 | 第二个命令的结果告知我们,我们现在有一个叫做`customer`的索引,并且它有5个主分片和1份副本(都是默认值),其中包含0个文档。 20 | 21 | 你可能也注意到了这个customer索引有一个黄色健康标签。回顾我们之前的讨论,黄色意味着某些副本没有(或者还未)被分配。这个索引之所以这样,是因为Elasticsearch会默认为这个索引库创建一份副本。 然而由于我们现在只有一个节点在运行,那这份副本就分配不了了(为了高可用),直到另外一个节点加入到这个集群后,才能分配。一旦那份副本被分配到第二个节点,这个索引库的健康状态就会变成绿色。 22 | -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Cluster/Delete_an_Index.md: -------------------------------------------------------------------------------- 1 | # 删除一个文档 2 | 3 | 现在让我们删除我们刚刚创建的索引库,并再次列出所有的索库: 4 | 5 | ```js 6 | DELETE /customer?pretty 7 | GET /_cat/indices?v 8 | ``` 9 | 10 | 响应如下: 11 | 12 | ```js 13 | health status index uuid pri rep docs.count docs.deleted store.size pri.store.size 14 | ``` 15 | 16 | 这表明我们成功地删除了这个索引,现在我们回到了集群刚开始时什么都所有的状态。 17 | 18 | 再开始之前,我们细看一下我们刚刚学过的API命令: 19 | 20 | ```js 21 | PUT /customer 22 | PUT /customer/external/1 23 | { 24 | "name": "John Doe" 25 | } 26 | GET /customer/external/1 27 | DELETE /customer' 28 | ``` 29 | 30 | 如果我们仔细研究上面的命令,我们可以看到Elasticsearch是如何访问数据的一个模式。这种模式可以概括如下: 31 | 32 | ```js 33 | :/// 34 | ``` 35 | 36 | 这个REST访问模式普遍适用于所有的API命令,如果你能记住它,你就会为掌握Elasticsearch开了一个好头。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Cluster/Index_and_Query_a_Document.md: -------------------------------------------------------------------------------- 1 | # 索引文档创建与查询 2 | 3 | 现在让我们放一些东西到`customer`索引库中。首先要知道的是,要创建一个索引文档,我们必须要告诉Elasticsearch这个文档要存放到这个索引库的哪个类型(type)下。 4 | 5 | 让我们将一个简单的会员文档索引到`customer`索引库的“external”类型中,这个文档的ID是1,操作如下: 6 | 7 | ```js 8 | PUT /customer/external/1?pretty 9 | { 10 | "name": "John Doe" 11 | } 12 | ``` 13 | 14 | 响应如下: 15 | 16 | ```js 17 | { 18 | "_index" : "customer", 19 | "_type" : "external", 20 | "_id" : "1", 21 | "_version" : 1, 22 | "result" : "created", 23 | "_shards" : { 24 | "total" : 2, 25 | "successful" : 1, 26 | "failed" : 0 27 | }, 28 | "created" : true 29 | } 30 | ``` 31 | 32 | 从上面的响应中,我们可以看到,一个新的会员文档在customer索引库的external类型中被成功创建。文档也有一个内部id 1, 这个id是我们在创建索引文档的时候指定的。 33 | 34 | 需要注意的是,当你想将文档索引到某个索引库时候,Elasticsearch并不强制要求你先显式地创建索引库。在前面这个例子中,如果`customer`索引库不存在,Elasticsearch将会自动地创建这个索引。 35 | 36 | 现在,让我们把刚刚索引的文档取出来: 37 | 38 | ```js 39 | GET /customer/external/1?pretty 40 | ``` 41 | 42 | 响应如下: 43 | 44 | ```js 45 | { 46 | "_index" : "customer", 47 | "_type" : "external", 48 | "_id" : "1", 49 | "_version" : 1, 50 | "found" : true, 51 | "_source" : { "name": "John Doe" } 52 | } 53 | ``` 54 | 55 | 没有什么特别的,除了`found`字段标识我们找到这个ID为1的文档外,_source字段采用JSON格式返回了我们之前创建的完整文档。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Cluster/List_All_Indices.md: -------------------------------------------------------------------------------- 1 | # 获取所有索引库 2 | 3 | 让我们看一下我们的索引: 4 | 5 | ```js 6 | curl '/_cat/indices?v' 7 | ``` 8 | 9 | 对应的响应是: 10 | 11 | ```js 12 | health status index uuid pri rep docs.count docs.deleted store.size pri.store.size 13 | ``` 14 | 15 | 这个结果意味着,在我们的集群中没有任何索引。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Data.md: -------------------------------------------------------------------------------- 1 | # 探索您的数据 2 | 3 | ## 样本数据集 4 | 5 | 现在我们对于基本的东西已经有了一些认识,现在让我们尝试使用一些更加贴近真实的数据集。我准备了一些假想的银行账户信息的JSON文档样本。文档具有以下的模式(schema): 6 | 7 | ```js 8 | { 9 | "account_number": 0, 10 | "balance": 16623, 11 | "firstname": "Bradshaw", 12 | "lastname": "Mckenzie", 13 | "age": 29, 14 | "gender": "F", 15 | "address": "244 Columbus Place", 16 | "employer": "Euron", 17 | "email": "bradshawmckenzie@euron.com", 18 | "city": "Hobucken", 19 | "state": "CO" 20 | } 21 | ``` 22 | 23 | 不要好奇,我是从[www.json-generator.com/](http://www.json-generator.com/)自动生成这些数据的,所以请忽略这些数据的真实意义。 24 | 25 | ## 载入样本数据 26 | 27 | 你可以在[这里](https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json?raw=true)下载样本数据集。将其解压到当前目录下并加载到我们的集群里: 28 | 29 | ```js 30 | curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json" 31 | curl 'localhost:9200/_cat/indices?v' 32 | ``` 33 | 34 | 响应是: 35 | 36 | ```js 37 | health status index uuid pri rep docs.count docs.deleted store.size pri.store.size 38 | yellow open bank l7sSYV2cQXmu6_4rJWVIww 5 1 1000 0 128.6kb 128.6kb 39 | ``` 40 | 41 | 这意味着我们成功批量索引了1000个文档到`bank`索引中(在account类型下)。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Data/Executing_Filters.md: -------------------------------------------------------------------------------- 1 | # 执行过滤 2 | 3 | 在前面的章节中,我们跳过了文档得分的细节(搜索结果中的`_score`字段)。分数是一个数字值,是一个测量文本与查询条件匹配度的相对值。得分越高,文档越相关,得分越低文档的相关度越低。 4 | 5 | 但并不是所有的查询都需要计算得分,特别是在只过滤文档集的场景中。对于那些我们不需要相关度得分的场景下,Elasticsearch会探测与自动优化查询的执行过程,不计算无用的分数。 6 | 7 | 在前面的章节中我们介绍的布尔查询](../..//Query_DSL/Compound_queries/Bool_Query.md)同样也支持`过滤`子句的语法,在不改变得分的情况下,他使得查询请求返回的文档会被另一个条件进一步筛选。下面的示例,我们介绍一下[范围查询](../../Query_DSL/Term_level_queries/Range_Query.md),它允许我们根据一个值得范围来过滤文档,它只能用的数字与日期类型的过滤上。 8 | 9 | 这个示例演示了使用一个布尔查询来返回账户余额在20000与30000之间的所有账户信息(包括20000与30000)。换句话说,我们想要找到账户余额大于等于20000并且小于等于30000的账户。 10 | 11 | ```js 12 | GET /bank/_search 13 | { 14 | "query": { 15 | "bool": { 16 | "must": { "match_all": {} }, 17 | "filter": { 18 | "range": { 19 | "balance": { 20 | "gte": 20000, 21 | "lte": 30000 22 | } 23 | } 24 | } 25 | } 26 | } 27 | } 28 | ``` 29 | 30 | 分析上面的例子,被过滤的查询包含一个`match_all`查询(`query`部分)和一个`range`查询(`filter`部分)。我们可以用其它的条件来替换`query`与`filter`部分的内容。在上面的应用场景中,范围查询的最大意义在于:所有的在这个范围之内的文档都是平等的(或者说相关度都是一样的),没有一个文档比另一个文档更相关。 31 | 32 | 除了`match_all`, `match`, `bool`,`filtered`和`range`查询,还有很多其它类型的查询,我们这里不会涉及。由于我们已经对它们的工作原理有了基本的理解,将其应用到其它类型的查询、过滤器上也不是件难事。 -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Data/Executing_Searches.md: -------------------------------------------------------------------------------- 1 | # 执行搜索 2 | 3 | 现在我们已经知道了几个基本的参数, 让我们进一步学习查询语言。首先我们看一下返回文档的字段。 默认情况下,是返回完整的JSON文档的。这可以通过`source`来引用(搜索`hits`中的`_source`字段)。如果我们不想返回完整的源文档,我们可以指定返回的几个字段。 4 | 5 | 下面这个例子说明了从搜索中只返回两个字段`account_number`和`balance`(这两个字段都必须包含在`_source`中),如下: 6 | 7 | ```js 8 | GET /bank/_search 9 | { 10 | "query": { "match_all": {} }, 11 | "_source": ["account_number", "balance"] 12 | } 13 | ``` 14 | 15 | 注意到上面的例子简化了`_source`字段,它仍将会返回一个叫做`_source`的字段,但是只会包含`account_number`和`balance`两个子字段。 16 | 17 | 如果你有SQL经验,上述查询在概念上有些像SQL的 `SELECT 字段1, 字段2 FROM TABLE_1`。 18 | 19 | 现在让我们进入到查询部分。之前,我们学习了`match_all`查询是怎样匹配到所有的文档的。现在我们介绍一种新的查询,叫做`match`查询,这可以看成是一个简单的字段搜索(比如对某个或某些特定字段的搜索) 20 | 21 | 下面这个例子返回账户编号为20的文档: 22 | 23 | ```js 24 | GET /bank/_search 25 | { 26 | "query": { "match": { "account_number": 20 } } 27 | } 28 | ``` 29 | 30 | 下面这个例子返回地址中包含了“mill”词条(term)的所有账户: 31 | 32 | ```js 33 | GET /bank/_search 34 | { 35 | "query": { "match": { "address": "mill" } } 36 | } 37 | ``` 38 | 39 | 下面这个例子返回地址中包含“mill”或者“lane”词条的账户: 40 | 41 | ```js 42 | GET /bank/_search 43 | { 44 | "query": { "match": { "address": "mill lane" } } 45 | } 46 | ``` 47 | 48 | 下面这个例子是`match`的变体(`match_phrase`),它会去匹配短语“mill lane”: 49 | 50 | ```js 51 | GET /bank/_search 52 | { 53 | "query": { "match_phrase": { "address": "mill lane" } } 54 | } 55 | ``` 56 | 57 | 现在,让我们介绍一下[布尔查询](../..//Query_DSL/Compound_queries/Bool_Query.md)。布尔查询允许我们利用布尔逻辑将较小的查询组合成较大的查询。 58 | 59 | 现在这个例子组合了两个`match`查询,这个组合查询返回同时包含了“mill” 和“lane” 的所有的账户: 60 | 61 | ```js 62 | GET /bank/_search 63 | { 64 | "query": { 65 | "bool": { 66 | "must": [ 67 | { "match": { "address": "mill" } }, 68 | { "match": { "address": "lane" } } 69 | ] 70 | } 71 | } 72 | } 73 | ``` 74 | 75 | 在上面的例子中,`bool` `must`语句指明了对于一个文档,所有的查询都必须为真,这个文档才能够匹配成功。 76 | 77 | 相反的, 下面的例子组合了两个`match`查询,它返回的是地址中可能包含了“mill” 或者“lane”的所有的账户: 78 | 79 | ```js 80 | GET /bank/_search 81 | { 82 | "query": { 83 | "bool": { 84 | "should": [ 85 | { "match": { "address": "mill" } }, 86 | { "match": { "address": "lane" } } 87 | ] 88 | } 89 | } 90 | } 91 | ``` 92 | 93 | 在上面的例子中`bool` `should`语句指明,对于一个文档,查询列表中,只要有一个查询匹配,那么这个文档就被看成是匹配的。 94 | 95 | 现在这个例子组合了两个查询,它返回地址中既不包含“mill”,同时也不包含“lane”的所有的账户信息: 96 | 97 | ```js 98 | GET /bank/_search 99 | { 100 | "query": { 101 | "bool": { 102 | "must_not": [ 103 | { "match": { "address": "mill" } }, 104 | { "match": { "address": "lane" } } 105 | ] 106 | } 107 | } 108 | } 109 | ``` 110 | 111 | 在上面的例子中,`bool` `must_not`语句指明,对于一个文档,查询列表中的的所有查询都必须都不为真,这个文档才被认为是匹配的。 112 | 113 | 我们可以在一个bool查询里一起使用`must`、`should`、`must_not`。 此外,我们可以将bool查询放到这样的bool语句中来模拟复杂的、多层级的布尔逻辑。 114 | 115 | 下面这个例子返回40岁以上并且不生活在ID(aho)的人的账户: 116 | 117 | ```js 118 | GET /bank/_search 119 | { 120 | "query": { 121 | "bool": { 122 | "must": [ 123 | { "match": { "age": "40" } } 124 | ], 125 | "must_not": [ 126 | { "match": { "state": "ID" } } 127 | ] 128 | } 129 | } 130 | } 131 | ``` -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Data/Introducing_the_Query_Language.md: -------------------------------------------------------------------------------- 1 | # 查询语言介绍 2 | 3 | Elasticsearch 提供一种JSON风格的特定领域语言,利用它你可以执行查询。这种语言称为[查询DSL](../../Query_DSL.md)。这个查询语言非常全面,乍一看上去会有点吓人,最好的学习方法就是以几个基础的例子来开始。 4 | 5 | 回到上一个例子,我们执行了这个查询: 6 | 7 | ```js 8 | GET /bank/_search 9 | { 10 | "query": { "match_all": {} } 11 | } 12 | ``` 13 | 14 | 分析以上的这个查询,其中的`query`部分告诉我查询的定义,`match_all`部分就是我们想要运行的查询的类型。`match_all`查询,就是简单地查询一个指定索引库下的所有的文档。 15 | 16 | 除了这个`query`参数之外,我们也可以通过传递其它的参数来影响搜索结果。在之前的示例中我们演示了`sort`,下面演示一下`size`: 17 | 18 | ```js 19 | GET /bank/_search 20 | { 21 | "query": { "match_all": {} }, 22 | "size": 1 23 | } 24 | ``` 25 | 26 | 注意,如果没有指定`size`的值,那么它默认就是10。 27 | 28 | 下面的例子,做了一次`match_all`查询并且返回第11到第20个文档: 29 | 30 | ```js 31 | GET /bank/_search 32 | { 33 | "query": { "match_all": {} }, 34 | "from": 10, 35 | "size": 10 36 | } 37 | ``` 38 | 39 | 其中的`from`参数指明从哪个文档开始,`size`参数指明从from参数开始,要返回的文档数。这个特性对于搜索结果分页来说非常有帮助。注意,如果不指定from的值,它默认就是`0`。 40 | 41 | 下面这个例子演示了`match_all`查询,并且以账户余额降序排序,返前10(默认大小)个文档: 42 | 43 | ```js 44 | GET /bank/_search 45 | { 46 | "query": { "match_all": {} }, 47 | "sort": { "balance": { "order": "desc" } } 48 | } 49 | ``` -------------------------------------------------------------------------------- /Getting_Started/Exploring_Your_Data/The_Search_API.md: -------------------------------------------------------------------------------- 1 | # 搜索API 2 | 3 | 现在,让我们以一些简单的搜索来开始学习。有两种基本的方式来运行搜索:一种是在REST请求的URI中发送搜索参数,另一种是将搜索参数发送到REST请求体中。请求体方法的表达能力更好,并且你可以使用更加可读的JSON格式来定义搜索。我们将尝试使用一次请求URI作为例子,但是教程的后面部分,我们将仅仅使用请求体方法。 4 | 5 | 搜索的REST API可以通过`_search`端点(endpoint)来访问。下面这个例子返回`bank`索引中的所有的文档: 6 | 7 | ```js 8 | GET /bank/_search?q=*&sort=account_number:asc&pretty 9 | ``` 10 | 11 | 先来分析一下搜索请求。我们在`bank`索引库中搜索( `_search`端点),并且`q=*`参数指示Elasticsearch去匹配这个索引中所有的文档。`sort=account_number:asc`指示结果按`account_number`字段升序排列。pretty参数仅仅是告诉Elasticsearch返回美观的JSON结果。 12 | 13 | 以下是响应(部分列出): 14 | 15 | ```js 16 | { 17 | "took" : 63, 18 | "timed_out" : false, 19 | "_shards" : { 20 | "total" : 5, 21 | "successful" : 5, 22 | "failed" : 0 23 | }, 24 | "hits" : { 25 | "total" : 1000, 26 | "max_score" : null, 27 | "hits" : [ { 28 | "_index" : "bank", 29 | "_type" : "account", 30 | "_id" : "0", 31 | "sort": [0], 32 | "_score" : null, 33 | "_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"} 34 | }, { 35 | "_index" : "bank", 36 | "_type" : "account", 37 | "_id" : "1", 38 | "sort": [1], 39 | "_score" : null, 40 | "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"} 41 | }, ... 42 | ] 43 | } 44 | } 45 | ``` 46 | 47 | 对于这个响应,我们可以看到如下的部分: 48 | 49 | - `took`:Elasticsearch 执行这个搜索的耗时,以毫秒为单位 50 | - `timed_out`:指明这个搜索是否超时 51 | - `_shards`:指出多少个分片被搜索了,同时也标记了搜索成功与失败分片的数量 52 | - `hits`:搜索结果 53 | - `hits.total`:匹配查询条件的文档的总数目 54 | - `hits.hits`:真正的搜索结果数组(默认是前10个文档) 55 | - `hits.sort`:结果排序字段(如果缺失则按照得分排序) 56 | - `hits._score` 和 `max_score`:现在先忽略这些字段 57 | 58 | 使用请求体方法的等价搜索是: 59 | 60 | ```js 61 | GET /bank/_search 62 | { 63 | "query": { "match_all": {} }, 64 | "sort": [ 65 | { "account_number": "asc" } 66 | ] 67 | } 68 | ``` 69 | 70 | 与上面方法不同之处在于,并不是向URI中传递`q=*`,取而代之的是在`_search` API的请求体中POST了一个JSON格式的请求体。我们将在下一个章节中讨论这个JSON查询。 71 | 72 | 有一点你需要重点关注,一旦你取回了搜索结果,Elasticsearch就完成了使命,它不会保持任何服务器端的资源或者在你的结果中打开游标。这是和其它像SQL平台的一个鲜明的对比, 在那些平台上,你在先获取到查询结果的子集之后可以不断的从服务器提取结果中的剩余部分,这个数据集使用了一种有状态的服务器端游标技术。 -------------------------------------------------------------------------------- /Getting_Started/Modifying_Your_Data.md: -------------------------------------------------------------------------------- 1 | # 修改数据 2 | 3 | Elasticsearch提供了近乎实时的数据操作和搜索功能。默认情况下,从你索引/更新/删除你的数据动作开始到它出现在你的搜索结果中,大概会有1秒钟的延迟(刷新间隔)。这和其它的SQL平台不同,它们的数据在一个事务完成之后就会立即可用。 4 | 5 | ## 索引/替换文档 6 | 7 | 我们先前看到,怎样索引一个文档。现在我们再次调用那个命令: 8 | 9 | ```js 10 | PUT /customer/external/1?pretty 11 | { 12 | "name": "John Doe" 13 | } 14 | ``` 15 | 16 | 以上的命令将会把这个文档索引到customer索引的external类型中,其ID是1。如果我们对一个不同(或相同)的文档应用以上的命令,Elasticsearch将会用一个新的文档来替换(重新索引)当前ID为1的那个文档。 17 | 18 | ```js 19 | PUT /customer/external/1?pretty 20 | { 21 | "name": "Jane Doe" 22 | } 23 | ``` 24 | 25 | 以上的命令将ID为1的文档的name字段的值从“John Doe” 改成了“Jane Doe”。如果我们使用一个不同的ID,一个新的文档将会被索引,当前已经在索引中的文档则不会受到影响。 26 | 27 | ```js 28 | PUT /customer/external/2?pretty 29 | { 30 | "name": "Jane Doe" 31 | } 32 | ``` 33 | 34 | 以上的命令,将会创建一个ID为2的索引文档。 35 | 36 | 在索引的时候,ID部分是可选的。如果不指定,Elasticsearch将产生一个随机的ID来索引这个文档。Elasticsearch 生成的ID会作为索引API调用的一部分被返回。 37 | 38 | 下面的例子展示了怎样在没有指定ID的情况下来索引一个文档: 39 | 40 | ```js 41 | POST /customer/external?pretty 42 | { 43 | "name": "Jane Doe" 44 | } 45 | ``` 46 | 47 | 注意,在上面的情形中,由于我们没有指定一个ID,我们使用的是`POST`而不是`PUT`。 48 | 49 | -------------------------------------------------------------------------------- /Getting_Started/Modifying_Your_Data/Batch_Processing.md: -------------------------------------------------------------------------------- 1 | # 批量处理 2 | 3 | 除了能够对单个的文档进行索引、更新和删除之外,Elasticsearch也提供了操作的批量处理功能,它通过使用[_bulk API](../../Document_APIS/Bulk_API.md)实现。这个功能非常重要,因为它提供了非常高效的机制来尽可能快的完成多个操作,与此同时尽可能地减少网络交互。 4 | 5 | 作为一个快速的例子,以下调用在一次bulk操作中索引了两个文档(ID 1 - John Doe 与 ID 2 - Jane Doe) : 6 | 7 | ```js 8 | POST /customer/external/_bulk?pretty 9 | {"index":{"_id":"1"}} 10 | {"name": "John Doe" } 11 | {"index":{"_id":"2"}} 12 | {"name": "Jane Doe" } 13 | ``` 14 | 15 | 以下例子在一个bulk操作中,首先更新第一个文档(ID为1),然后删除第二个文档(ID为2) 16 | 17 | ```js 18 | POST /customer/external/_bulk?pretty 19 | {"update":{"_id":"1"}} 20 | {"doc": { "name": "John Doe becomes Jane Doe" } } 21 | {"delete":{"_id":"2"}} 22 | ``` 23 | 24 | 注意上面的delete动作,由于删除动作只需要被删除文档的ID,所以并没有对应的源文档。 25 | 26 | Bulk API不会因为其中的一个动作失败而整体失败。如果其中一个动作因为某些原因失败了,它将会继续处理后面的动作。在Bulk API返回时,它将提供每个动作的状态(按照同样的顺序),所以你能够看到某个动作成功与否。 -------------------------------------------------------------------------------- /Getting_Started/Modifying_Your_Data/Deleting_Documents.md: -------------------------------------------------------------------------------- 1 | # 删除文档 2 | 3 | 删除文档是非常简单直接的。以下的例子展示了怎样删除ID为2的文档: 4 | 5 | ```js 6 | DELETE /customer/external/2?pretty 7 | ``` 8 | 9 | 可以通过[根据查询条件删除API](../../Document_APIS/Delete_By_Query_API.md)来一次删除符合指定条件的文档。如果要通过`根据查询条件删除API`来删除所有文档,使用删除整个索引库替代会效率更高。 -------------------------------------------------------------------------------- /Getting_Started/Modifying_Your_Data/Updating_Documents.md: -------------------------------------------------------------------------------- 1 | # 更新文档 2 | 3 | 除了可以索引、替换文档之外,我们也可以更新一个文档。但要注意,Elasticsearch底层并不支持原地更新。在我们想要做一次更新的时候,Elasticsearch先删除旧文档,然后再索引新的文档。 4 | 5 | 下面的例子展示了怎样将ID为1的文档的name字段改成“Jane Doe”: 6 | 7 | ```js 8 | POST /customer/external/1/_update?pretty 9 | { 10 | "doc": { "name": "Jane Doe" } 11 | } 12 | ``` 13 | 14 | 下面的例子展示了怎样将ID为1的文档的name字段改成“Jane Doe”的同时,给它加上age字段: 15 | 16 | ```js 17 | POST /customer/external/1/_update?pretty 18 | { 19 | "doc": { "name": "Jane Doe", "age": 20 } 20 | } 21 | ``` 22 | 23 | 更新也可以通过使用简单的脚本来进行。这个例子使用一个脚本将age加5: 24 | 25 | ```js 26 | POST /customer/external/1/_update?pretty 27 | { 28 | "script" : "ctx._source.age += 5" 29 | } 30 | ``` 31 | 32 | 在上面的例子中,`ctx._source`指向当前被更新的文档。 33 | 34 | 注意,目前的更新操作只能一次修改在一个文档上。将来Elasticsearch将提供同时更新符合指定查询条件的多个文档的功能(类似于SQL的`UPDATE-WHERE`语句)。 35 | -------------------------------------------------------------------------------- /Glossary_of_terms.md: -------------------------------------------------------------------------------- 1 | # 术语表 2 | 3 | -------------------------------------------------------------------------------- /How_To.md: -------------------------------------------------------------------------------- 1 | # How To 2 | 3 | -------------------------------------------------------------------------------- /How_To/General_recommendations.md: -------------------------------------------------------------------------------- 1 | # General recommendations 2 | 3 | -------------------------------------------------------------------------------- /How_To/Recipes.md: -------------------------------------------------------------------------------- 1 | # Recipes 2 | 3 | -------------------------------------------------------------------------------- /How_To/Tune_for_disk_usage.md: -------------------------------------------------------------------------------- 1 | # Tune for disk usage 2 | 3 | -------------------------------------------------------------------------------- /How_To/Tune_for_indexing_speed.md: -------------------------------------------------------------------------------- 1 | # Tune for indexing speed 2 | 3 | -------------------------------------------------------------------------------- /How_To/Tune_for_search_speed.md: -------------------------------------------------------------------------------- 1 | # Tune for search speed 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules.md: -------------------------------------------------------------------------------- 1 | # Index模块 2 | 3 | 4 | 5 | ## 动态索引设置 -------------------------------------------------------------------------------- /Index_Modules/Analysis.md: -------------------------------------------------------------------------------- 1 | # Analysis 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Index_Shard_Allocation.md: -------------------------------------------------------------------------------- 1 | # Index Shard Allocation 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Index_Shard_Allocation/Delaying_allocation_when_a_node_leaves.md: -------------------------------------------------------------------------------- 1 | # Delaying allocation when a node leaves 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Index_Shard_Allocation/Index_recovery_prioritization.md: -------------------------------------------------------------------------------- 1 | # Index recovery prioritization 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Index_Shard_Allocation/Shard_Allocation_Filtering.md: -------------------------------------------------------------------------------- 1 | # Shard Allocation Filtering 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Index_Shard_Allocation/Total_Shards_Per_Node.md: -------------------------------------------------------------------------------- 1 | # Total Shards Per Node 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Mapper.md: -------------------------------------------------------------------------------- 1 | # Mapper 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Merge.md: -------------------------------------------------------------------------------- 1 | # Merge 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Similarity_module.md: -------------------------------------------------------------------------------- 1 | # Similarity module 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Slow_Log.md: -------------------------------------------------------------------------------- 1 | # Slow Log 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Store.md: -------------------------------------------------------------------------------- 1 | # Store 2 | 3 | default_fs[~~5.0.0~~] 4 | 5 | -------------------------------------------------------------------------------- /Index_Modules/Store/Pre-loading_data_into_the_file_system_cache.md: -------------------------------------------------------------------------------- 1 | # Pre-loading data into the file system cache 2 | 3 | -------------------------------------------------------------------------------- /Index_Modules/Translog.md: -------------------------------------------------------------------------------- 1 | # Translog 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs.md: -------------------------------------------------------------------------------- 1 | # 索引库API 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Analyze.md: -------------------------------------------------------------------------------- 1 | # Analyze 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Analyze/Explain_Analyze.md: -------------------------------------------------------------------------------- 1 | # Explain Analyze 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Clear_Cache.md: -------------------------------------------------------------------------------- 1 | # Clear Cache 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Create_Index.md: -------------------------------------------------------------------------------- 1 | # Create Index 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Delete_Index.md: -------------------------------------------------------------------------------- 1 | # Delete Index 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Flush.md: -------------------------------------------------------------------------------- 1 | # Flush 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Flush/Synced_Flush.md: -------------------------------------------------------------------------------- 1 | # Synced Flush 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Force_Merge.md: -------------------------------------------------------------------------------- 1 | # Force Merge 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Get_Field_Mapping.md: -------------------------------------------------------------------------------- 1 | # Get Field Mapping 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Get_Index.md: -------------------------------------------------------------------------------- 1 | # Get Index 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Get_Mapping.md: -------------------------------------------------------------------------------- 1 | # Get Mapping 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Get_Settings.md: -------------------------------------------------------------------------------- 1 | # Get Settings 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Index_Aliases.md: -------------------------------------------------------------------------------- 1 | # Index Aliases 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Index_Templates.md: -------------------------------------------------------------------------------- 1 | # Index Templates 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Indices_Exists.md: -------------------------------------------------------------------------------- 1 | # Indices Exists 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Indices_Recovery.md: -------------------------------------------------------------------------------- 1 | # Indices Recovery 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Indices_Segments.md: -------------------------------------------------------------------------------- 1 | # Indices Segments 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Indices_Shard_Stores.md: -------------------------------------------------------------------------------- 1 | # Indices Shard Stores 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Indices_Stats.md: -------------------------------------------------------------------------------- 1 | # Indices Stats 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Open_Close_Index_API.md: -------------------------------------------------------------------------------- 1 | # Open / Close Index API 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Put_Mapping.md: -------------------------------------------------------------------------------- 1 | # Put Mapping 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Refresh.md: -------------------------------------------------------------------------------- 1 | # Refresh 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Rollover_Index.md: -------------------------------------------------------------------------------- 1 | # Rollover Index 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Shadow_replica_indices.md: -------------------------------------------------------------------------------- 1 | # Shadow replica indices 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Shadow_replica_indices/Node_level_settings_related_to_shadow_replicas.md: -------------------------------------------------------------------------------- 1 | # Node level settings related to shadow replicas 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Shrink_Index.md: -------------------------------------------------------------------------------- 1 | # Shrink Index 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Types_Exists.md: -------------------------------------------------------------------------------- 1 | # Types Exists 2 | 3 | -------------------------------------------------------------------------------- /Indices_APIs/Update_Indices_Settings.md: -------------------------------------------------------------------------------- 1 | # Update Indices Settings 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node.md: -------------------------------------------------------------------------------- 1 | # Ingest节点 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Accessing_Data_in_Pipelines.md: -------------------------------------------------------------------------------- 1 | # Accessing Data in Pipelines 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Handling_Failures_in_Pipelines.md: -------------------------------------------------------------------------------- 1 | # Handling Failures in Pipelines 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Ingest_APIs.md: -------------------------------------------------------------------------------- 1 | # Ingest APIs 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Ingest_APIs/Delete_Pipeline_API.md: -------------------------------------------------------------------------------- 1 | # Delete Pipeline API 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Ingest_APIs/Get_Pipeline_API.md: -------------------------------------------------------------------------------- 1 | # Get Pipeline API 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Ingest_APIs/Put_Pipeline_API.md: -------------------------------------------------------------------------------- 1 | # Put Pipeline API 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Ingest_APIs/Simulate_Pipeline_API.md: -------------------------------------------------------------------------------- 1 | # Simulate Pipeline API 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Pipeline_Definition.md: -------------------------------------------------------------------------------- 1 | # Pipeline Definition 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors.md: -------------------------------------------------------------------------------- 1 | # Processors 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Append_Processor.md: -------------------------------------------------------------------------------- 1 | # Append Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Convert_Processor.md: -------------------------------------------------------------------------------- 1 | # Convert Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Date_Index_Name_Processor.md: -------------------------------------------------------------------------------- 1 | # Date Index Name Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Date_Processor.md: -------------------------------------------------------------------------------- 1 | # Date Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Dot_Expander_Processor.md: -------------------------------------------------------------------------------- 1 | # Dot Expander Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Fail_Processor.md: -------------------------------------------------------------------------------- 1 | # Fail Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Foreach_Processor.md: -------------------------------------------------------------------------------- 1 | # Foreach Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Grok_Processor.md: -------------------------------------------------------------------------------- 1 | # Grok Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Gsub_Processor.md: -------------------------------------------------------------------------------- 1 | # Gsub Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/JSON_Processor.md: -------------------------------------------------------------------------------- 1 | # JSON Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Join_Processor.md: -------------------------------------------------------------------------------- 1 | # Join Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/KV_Processor.md: -------------------------------------------------------------------------------- 1 | # KV Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Lowercase_Processor.md: -------------------------------------------------------------------------------- 1 | # Lowercase Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Remove_Processor.md: -------------------------------------------------------------------------------- 1 | # Remove Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Rename_Processor.md: -------------------------------------------------------------------------------- 1 | # Rename Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Script_Processor.md: -------------------------------------------------------------------------------- 1 | # Script Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Set_Processor.md: -------------------------------------------------------------------------------- 1 | # Set Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Sort_Processor.md: -------------------------------------------------------------------------------- 1 | # Sort Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Split_Processor.md: -------------------------------------------------------------------------------- 1 | # Split Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Trim_Processor.md: -------------------------------------------------------------------------------- 1 | # Trim Processor 2 | 3 | -------------------------------------------------------------------------------- /Ingest_Node/Processors/Uppercase_Processor.md: -------------------------------------------------------------------------------- 1 | # Uppercase Processor 2 | 3 | -------------------------------------------------------------------------------- /Mapping.md: -------------------------------------------------------------------------------- 1 | # Mapping 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Dynamic_Mapping.md: -------------------------------------------------------------------------------- 1 | # Dynamic Mapping 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Dynamic_Mapping/Dynamic_field_mapping.md: -------------------------------------------------------------------------------- 1 | # Dynamic field mapping 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Dynamic_Mapping/Dynamic_templates.md: -------------------------------------------------------------------------------- 1 | # Dynamic templates 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Dynamic_Mapping/Override_default_template.md: -------------------------------------------------------------------------------- 1 | # Override default template 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Dynamic_Mapping/_default__mapping.md: -------------------------------------------------------------------------------- 1 | # default mapping 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes.md: -------------------------------------------------------------------------------- 1 | # Field datatypes 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Array_datatype.md: -------------------------------------------------------------------------------- 1 | # Array datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Binary_datatype.md: -------------------------------------------------------------------------------- 1 | # Binary datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Boolean_datatype.md: -------------------------------------------------------------------------------- 1 | # Boolean datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Date_datatype.md: -------------------------------------------------------------------------------- 1 | # Date datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Geo-Shape_datatype.md: -------------------------------------------------------------------------------- 1 | # Geo-Shape datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Geo-point_datatype.md: -------------------------------------------------------------------------------- 1 | # Geo-point datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/IP_datatype.md: -------------------------------------------------------------------------------- 1 | # IP datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Keyword_datatype.md: -------------------------------------------------------------------------------- 1 | # Keyword datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Nested_datatype.md: -------------------------------------------------------------------------------- 1 | # Nested datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Numeric_datatypes.md: -------------------------------------------------------------------------------- 1 | # Numeric datatypes 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Object_datatype.md: -------------------------------------------------------------------------------- 1 | # Object datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Percolator_type.md: -------------------------------------------------------------------------------- 1 | # Percolator type 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Range_datatypes.md: -------------------------------------------------------------------------------- 1 | # Range datatypes 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/String_datatype.md: -------------------------------------------------------------------------------- 1 | # String datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Text_datatype.md: -------------------------------------------------------------------------------- 1 | # Text datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Field_datatypes/Token_count_datatype.md: -------------------------------------------------------------------------------- 1 | # Token count datatype 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters.md: -------------------------------------------------------------------------------- 1 | # Mapping parameters 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/analyzer.md: -------------------------------------------------------------------------------- 1 | # analyzer 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/boost.md: -------------------------------------------------------------------------------- 1 | # boost 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/coerce.md: -------------------------------------------------------------------------------- 1 | # coerce 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/copy_to.md: -------------------------------------------------------------------------------- 1 | # copy_to 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/doc_values.md: -------------------------------------------------------------------------------- 1 | # doc_values 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/dynamic.md: -------------------------------------------------------------------------------- 1 | # dynamic 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/enabled.md: -------------------------------------------------------------------------------- 1 | # enabled 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/fielddata.md: -------------------------------------------------------------------------------- 1 | # fielddata 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/fields.md: -------------------------------------------------------------------------------- 1 | # fields 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/format.md: -------------------------------------------------------------------------------- 1 | # format 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/ignore_above.md: -------------------------------------------------------------------------------- 1 | # ignore_above 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/ignore_malformed.md: -------------------------------------------------------------------------------- 1 | # ignore_malformed 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/include_in_all.md: -------------------------------------------------------------------------------- 1 | # include_in_all 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/index.md: -------------------------------------------------------------------------------- 1 | # index 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/index_options.md: -------------------------------------------------------------------------------- 1 | # index_options 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/normalizer.md: -------------------------------------------------------------------------------- 1 | # normalizer 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/norms.md: -------------------------------------------------------------------------------- 1 | # norms 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/null_value.md: -------------------------------------------------------------------------------- 1 | # null_value 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/position_increment_gap.md: -------------------------------------------------------------------------------- 1 | # position_increment_gap 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/properties.md: -------------------------------------------------------------------------------- 1 | # properties 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/search_analyzer.md: -------------------------------------------------------------------------------- 1 | # search_analyzer 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/similarity.md: -------------------------------------------------------------------------------- 1 | # similarity 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/store.md: -------------------------------------------------------------------------------- 1 | # store 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Mapping_parameters/term_vector.md: -------------------------------------------------------------------------------- 1 | # term_vector 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields.md: -------------------------------------------------------------------------------- 1 | # Meta-Fields 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_all_field.md: -------------------------------------------------------------------------------- 1 | # _all field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_field_names_field.md: -------------------------------------------------------------------------------- 1 | # _field_names field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_id_field.md: -------------------------------------------------------------------------------- 1 | # _id field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_index_field.md: -------------------------------------------------------------------------------- 1 | # _index field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_meta_field.md: -------------------------------------------------------------------------------- 1 | # _meta field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_parent_field.md: -------------------------------------------------------------------------------- 1 | # _parent field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_routing_field.md: -------------------------------------------------------------------------------- 1 | # _routing field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_source_field.md: -------------------------------------------------------------------------------- 1 | # _source field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_type_field.md: -------------------------------------------------------------------------------- 1 | # _type field 2 | 3 | -------------------------------------------------------------------------------- /Mapping/Meta-Fields/_uid_field.md: -------------------------------------------------------------------------------- 1 | # _uid field 2 | 3 | -------------------------------------------------------------------------------- /Modules.md: -------------------------------------------------------------------------------- 1 | # 模块 2 | 3 | 本章节负责介绍Elasticsearch包含的各个模块的功能,每个模块的配置都可以通过如下方式进行配置: 4 | 5 | *静态的* 6 | 7 |   *这些配置项必须基于节点来进行设置,在启动节点前可以通过`elasticsearch.yml`配置文件、环境变量、命令行参数方式来进行配置。他们必须明确地在集群中的每个节点上进行设置。* 8 | 9 | *动态的* 10 | 11 |   *这些配置可以通过群集的[cluster-update-settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html) API进行动态更新。* 12 | 13 | 本节介绍的模块有: 14 | 15 | [Cluster-level routing and shard allocation(集群级别的路由与分片分配)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html)) 16 | 17 |   *用来控制在何处、何时、以及如何给节点分配分片。* 18 | 19 | [Discovery(发现)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html) 20 | 21 |   *构成一个集群的节点彼此之间是如何发现的。* 22 | 23 | [Gateway(网关)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html) 24 | 25 |   *集群启动恢复前需要多少个节点加入。* 26 | 27 | [HTTP](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html) 28 | 29 |   *用来控制配置`HTTP REST`接口。* 30 | 31 | [Indices(索引)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-indices.html) 32 | 33 |   *所有跟索引相关的设置。* 34 | 35 | [Network(网络)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) 36 | 37 |   *控制默认的网络设置。* 38 | 39 | [Node client(节点客户端)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) 40 | 41 |   *一个加入集群的Java客户端节点,但不能保存数据或作为主节点。* 42 | 43 | [Painless](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-painless.html) 44 | 45 |   *Elasticsearch内置的脚本语言,遵循尽可能的安全设计。* 46 | 47 | [Plugins(插件)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-plugins.html) 48 | 49 |   *通过插件来扩展Elasticsearch的功能。* 50 | 51 | [Scripting(脚本)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html) 52 | 53 |   *通过Lucene表达式、Groovy、Python、以及Javascript来自定义脚本。你也可以使用内置的脚本语言[Painless](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-painless.html)。* 54 | 55 | [Snapshot/Restore(快照/还原)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html) 56 | 57 |   *通过快照与还原模块来备份你的数据。* 58 | 59 | [Thread pools(线程池)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html) 60 | 61 |   *Elasticsearch专用的线程池的信息。* 62 | 63 | [Transport(传输)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html) 64 | 65 |   *Elasticsearch内部各节点之间的网络传输层通信配置。* 66 | 67 | [Tribe nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-tribe.html) 68 | 69 |   *Tribe节点能加入一个或多个集群,并作为它们之间的联合客户端。* 70 | 71 | [Cross cluster Search(跨集群搜索)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html) 72 | 73 |   *跨集群搜索功能可以通过一个不加入集群、并且能作为它们之间的联合客户端来实现一个以上集群的搜索。* -------------------------------------------------------------------------------- /Modules/Cluster.md: -------------------------------------------------------------------------------- 1 | # 集群 2 | 3 | -------------------------------------------------------------------------------- /Modules/Cluster/Cluster_Level_Shard_Allocation.md: -------------------------------------------------------------------------------- 1 | # 集群的分片分配 2 | 3 | -------------------------------------------------------------------------------- /Modules/Cluster/Disk-based_Shard_Allocation.md: -------------------------------------------------------------------------------- 1 | # 基于磁盘的分片分配 2 | 3 | -------------------------------------------------------------------------------- /Modules/Cluster/Miscellaneous_cluster_settings.md: -------------------------------------------------------------------------------- 1 | # 其他群集设置 2 | 3 | -------------------------------------------------------------------------------- /Modules/Cluster/Shard_Allocation_Awareness.md: -------------------------------------------------------------------------------- 1 | # 了解分片分配 2 | 3 | -------------------------------------------------------------------------------- /Modules/Cluster/Shard_Allocation_Filtering.md: -------------------------------------------------------------------------------- 1 | # 分片分配过滤 2 | 3 | -------------------------------------------------------------------------------- /Modules/Cross_Cluster_Search.md: -------------------------------------------------------------------------------- 1 | # 跨集群搜索 2 | 3 | -------------------------------------------------------------------------------- /Modules/Discovery.md: -------------------------------------------------------------------------------- 1 | # Discovery 2 | 3 | -------------------------------------------------------------------------------- /Modules/Discovery/Azure_Classic_Discovery.md: -------------------------------------------------------------------------------- 1 | # Azure Classic Discovery 2 | 3 | -------------------------------------------------------------------------------- /Modules/Discovery/EC2_Discovery.md: -------------------------------------------------------------------------------- 1 | # EC2 Discovery 2 | 3 | -------------------------------------------------------------------------------- /Modules/Discovery/Google_Compute_Engine_Discovery.md: -------------------------------------------------------------------------------- 1 | # Google Compute Engine Discovery 2 | 3 | -------------------------------------------------------------------------------- /Modules/Discovery/Zen_Discovery.md: -------------------------------------------------------------------------------- 1 | # Zen Discovery 2 | 3 | ## 主节点选举 -------------------------------------------------------------------------------- /Modules/HTTP.md: -------------------------------------------------------------------------------- 1 | # HTTP 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices.md: -------------------------------------------------------------------------------- 1 | # 索引库 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices/Circuit_Breaker.md: -------------------------------------------------------------------------------- 1 | # 熔断 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices/Fielddata.md: -------------------------------------------------------------------------------- 1 | # Fielddata 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices/Indexing_Buffer.md: -------------------------------------------------------------------------------- 1 | # 索引缓冲 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices/Indices_Recovery.md: -------------------------------------------------------------------------------- 1 | # 索引库恢复 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices/Node_Query_Cache.md: -------------------------------------------------------------------------------- 1 | # 节点查询缓存 2 | 3 | -------------------------------------------------------------------------------- /Modules/Indices/Shard_request_cache.md: -------------------------------------------------------------------------------- 1 | # 分片请求缓存 2 | 3 | -------------------------------------------------------------------------------- /Modules/Local_Gateway.md: -------------------------------------------------------------------------------- 1 | # 本地网关 2 | 3 | -------------------------------------------------------------------------------- /Modules/Network_Settings.md: -------------------------------------------------------------------------------- 1 | # 网络设置 2 | 3 | -------------------------------------------------------------------------------- /Modules/Node.md: -------------------------------------------------------------------------------- 1 | # 节点 2 | 3 | ## 通过`minimum_master_nodes`避免脑裂 4 | 5 | -------------------------------------------------------------------------------- /Modules/Plugins.md: -------------------------------------------------------------------------------- 1 | # 插件 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting.md: -------------------------------------------------------------------------------- 1 | # 脚本 2 | 3 | 脚本模块能够帮你通过脚本来自定义表达式求值。例如,你可以使用脚本作为搜索请求的一部分返回“脚本字段”或自定义一个评分查询。 4 | 5 | 默认脚本语言为[Painless](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-painless.html)。您能够通过添加`lang`插件来启用其他语言编写的脚本。任何使用脚本的地方,您都可以通过设置`lang`参数来指定脚本的语言。 6 | 7 | ## 普通语言 8 | 9 | 这些语言可以用于任何的脚本API,并给予了最大的灵活性。 10 | 11 | | 语言 | 沙盒 | 所需插件 | 12 | | --- | :---: | --- | 13 | | painless | yes | 内置 | 14 | | groovy | no | 内置 | 15 | | javascript | no | [lang-javascript](https://www.elastic.co/guide/en/elasticsearch/plugins/5.3/lang-javascript.html) | 16 | | python | no | [lang-javascript](https://www.elastic.co/guide/en/elasticsearch/plugins/5.3/lang-javascript.html) | 17 | 18 | ## 专业语言 19 | 20 | 这些语言不太灵活,但对于某些任务通常有更高的性能。 21 | 22 | 语言 |沙盒 |所需插件 |用途 23 | -----------|:-----------:|---------------|------ 24 | [expression](./Scripting/Lucene_Expressions_Language.md)| yes |内置 |快速自定义评分与排序 25 | [mustache](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html) |yes |内置 | 模板 26 | [java](./Scripting/Native_(Java)_Scripts.md) |n/a |自己写 | 专业API 27 | 28 | > **脚本与安全**(警告) 29 | > 30 | > 语言在设计时是考虑到安全沙盒的。然而,非沙盒语言可能是一个安全问题,请阅读[脚本与安全](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-security.html)来获取详细信息。 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Modules/Scripting/Accessing_document_fields_and_special_variables.md: -------------------------------------------------------------------------------- 1 | # 文档中字段的访问以及一些特殊变量 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting/Groovy_Scripting_Language.md: -------------------------------------------------------------------------------- 1 | # Groovy脚本语言 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting/How_to_use_scripts.md: -------------------------------------------------------------------------------- 1 | # 如何使用脚本 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting/Native_Java_Scripts.md: -------------------------------------------------------------------------------- 1 | # 原生(Java)脚本 2 | 3 | 有时候`groovy`和[表达式](./Lucene_Expressions_Language.md)是不够的。这种时候可以实现原生脚本。 4 | 5 | 实现原生脚本,最好的方法是编写一个插件并安装它。如何编写一个插件并让Elasticsearch正确的加载它,在[插件文档](https://www.elastic.co/guide/en/elasticsearch/plugins/5.3/plugin-authors.html)章节有更多的介绍。 6 | 7 | 要注册一个新的脚本,你需要通过实现`NativeScriptFactory`来构建它。可以通过继承`AbstractExecutableScript`或`AbstractSearchScript`。 另外一种可能是最有用的方式,通过扩展`AbstractLongSearchScript`和`AbstractDoubleSearchScript`。最后,你还需要通过实现`ScriptPlugin`接口来注册原生脚本插件。 8 | 9 | 下面展示的是如何在一个类中来完成所有事情,它会是这样的: 10 | 11 | ```java 12 | public class MyNativeScriptPlugin extends Plugin implements ScriptPlugin { 13 | 14 | @Override 15 | public List getNativeScripts() { 16 | return Collections.singletonList(new MyNativeScriptFactory()); 17 | } 18 | 19 | public static class MyNativeScriptFactory implements NativeScriptFactory { 20 | @Override 21 | public ExecutableScript newScript(@Nullable Map params) { 22 | return new MyNativeScript(); 23 | } 24 | @Override 25 | public boolean needsScores() { 26 | return false; 27 | } 28 | @Override 29 | public String getName() { 30 | return "my_script"; 31 | } 32 | } 33 | 34 | public static class MyNativeScript extends AbstractDoubleSearchScript { 35 | @Override 36 | public double runAsDouble() { 37 | double a = (double) source().get("a"); 38 | double b = (double) source().get("b"); 39 | return a * b; 40 | } 41 | } 42 | } 43 | ``` 44 | 45 | 您可以通过指定脚本的`lang`字段值为`native`,以及`inline`字段的值为脚本的名称来执行它: 46 | 47 | ```js 48 | POST /_search 49 | { 50 | "query": { 51 | "function_score": { 52 | "query": { 53 | "match": { 54 | "body": "foo" 55 | } 56 | }, 57 | "functions": [ 58 | { 59 | "script_score": { 60 | "script": { 61 | "inline": "my_script", 62 | "lang" : "native" 63 | } 64 | } 65 | } 66 | ] 67 | } 68 | } 69 | } 70 | ``` -------------------------------------------------------------------------------- /Modules/Scripting/Painless_Debugging.md: -------------------------------------------------------------------------------- 1 | # PainLess调试 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting/Painless_Scripting_Language.md: -------------------------------------------------------------------------------- 1 | # PainLess脚本语言 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting/Painless_Syntax.md: -------------------------------------------------------------------------------- 1 | # PainLess语法 2 | 3 | -------------------------------------------------------------------------------- /Modules/Scripting/Scripting_and_security.md: -------------------------------------------------------------------------------- 1 | # 脚本与安全 2 | 3 | ## Script source settings -------------------------------------------------------------------------------- /Modules/Thread_Pool.md: -------------------------------------------------------------------------------- 1 | # 线程池 2 | 3 | 每个节点都有一些线程池来优化线程内存的消耗,按节点来配置管理。有些线程池还拥有与之关联的队列配置,用来允许挂住一些未处理的请求,而不是丢弃它。 4 | 5 | 下面仅列出来了一些重要的线程池: 6 | 7 | generic 8 | 9 |   *用于通用的操作(例如:后台节点发现),线程池类型为 **scaling**。* 10 | 11 | index 12 | 13 |   *用于index/delete操作,线程池类型为 **fixed**, 大小的为`处理器数量`,队列大小为`200`,最大线程数为 `1 + 处理器数量`。* 14 | 15 | search 16 | 17 |   *用于count/search/suggest操作。线程池类型为 **fixed**, 大小的为`int((处理器数量 * 3) / 2) +1`,队列大小为`1000`。* 18 | 19 | get 20 | 21 |   *用于get操作。线程池类型为 **fixed**,大小的为`处理器数量`,队列大小为`1000`。* 22 | 23 | bulk 24 | 25 |   *用于bulk操作,线程池类型为 **fixed**, 大小的为`处理器数量`,队列大小为`200`,该池的最大线程数为 `1 + 处理器数量`。* 26 | 27 | percolate 28 | 29 |   *用于percolate操作,线程池类型为 **fixed**, 大小的为`处理器数量`,队列大小为`1000`* 30 | 31 | snapshot 32 | 33 |   *用于snaphost/restore操作。线程池类型为 **scaling**,线程保持存活时间为5分钟,最大线程数为`min(5, (处理器数量)/2)`。* 34 | 35 | warmer 36 | 37 |   *用于segment warm-up操作。线程池类型为 **scaling**,线程保持存活时间为5分钟,最大线程数为`min(5, (处理器数量)/2)`。* 38 | 39 | refresh 40 | 41 |   *用于refresh操作。线程池类型为 **scaling**,线程空闲保持存活时间为5分钟,最大线程数为`min(10, (处理器数量)/2)`。* 42 | 43 | listener 44 | 45 |   *主要用于Java客户端线程监听器被设置为true时执行动作。线程池类型为 **scaling**,最大线程数为`min(10, (处理器数量)/2)`。* 46 | 47 | **更改指定线程池可以通过设置指定类型的参数来实现; 例如,改变`index`线程池有更多的线程:** 48 | 49 | ```yaml 50 | thread_pool: 51 | index: 52 | size: 30 53 | ``` 54 | 55 | ## 线程池类型 56 | 57 | 以下是线程池的类型和各自的参数: 58 | 59 | ### fixed(固定) 60 | 61 | `fixed`线程池拥有固定数量的线程来处理请求,在没有空闲线程时请求将被挂在队列中(可选配)。 62 | 63 | `size`参数用来控制线程的数目,默认为数量为5。 64 | 65 | `queue_size`参数可以控制在没有空闲线程时,能排队挂起的请求数。默认情况下它被设置为`-1`,这意味着它是无限的。当一个请求进来时如果队列已满,请求将被中止。 66 | 67 | ```yaml 68 | thread_pool: 69 | index: 70 | size: 30 71 | queue_size: 1000 72 | ``` 73 | 74 | ### scaling(弹性) 75 | 76 | `scaling`线程池拥有的线程数量是动态的。这个数字介于`core`和`max`参数的配置之间变化。 77 | 78 | `keep_alive`参数用来控制线程在线程池中空闲的最长时间。(译者注:线程池中线程的空闲时间超过此值、且池中的线程数量不少于`core`时,线程会被销毁)。 79 | 80 | ```yaml 81 | thread_pool: 82 | warmer: 83 | core: 1 84 | max: 8 85 | keep_alive: 2m 86 | ``` 87 | 88 | ## 处理器设置 89 | 90 | Elasticsearch会自动探测处理器的数量,并且线程池的设置将基于它自动设置。在某些情况下,你可能需要自己覆盖自动探测的处理器数量,这可以通过显式设置`processors`参数来进行设置。 91 | 92 | ```yaml 93 | processors: 2 94 | ``` 95 | 96 | 下面有几个场景是需要明确的覆盖的`processors`设置: 97 | 98 | 1. 如果要在同一主机上运行Elasticsearch的多个实例,但希望Elasticsearch线程池的大小只根据一部分CPU来设置,这时你应该通过`processors`参数来重设处理器数量。(例如,如果你在16核的机器上运行两个Elasticsearch实例,可以设置`processors`为`8`)。请注意,这是一个专家级的场景,这种情况不仅仅是设置一下`processors`就行的,因为还有更多复杂的其他因素需要设置,譬如修改垃圾收集器线程数量、绑定进程到CPU等。 99 | 1. 自动探测处理器数量的默认上限是32。这意味着,在具有超过32个处理器的系统中,Elasticsearch的线程池大小会受限于32个处理器。加入此限制是问了避免在没有正确调整操作系统的`ulimit`最大进程数时创建了过多的线程,在你适当的调整`ulimit`情况下,则可以显式设置此`processors`参数。 100 | 1. 有时候被错误地检测出处理器的数量,在这种情况下,明确设置`processors`将解决此问题。 101 | 102 | 若要检查自动探测的处理器数量,可以使用节点信息API通过os标志来查看。 -------------------------------------------------------------------------------- /Modules/Transport.md: -------------------------------------------------------------------------------- 1 | # 传输 2 | 3 | -------------------------------------------------------------------------------- /Modules/Tribe_node.md: -------------------------------------------------------------------------------- 1 | # Tribe节点 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL.md: -------------------------------------------------------------------------------- 1 | # DSL查询 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries.md: -------------------------------------------------------------------------------- 1 | # Compound queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries/Bool_Query.md: -------------------------------------------------------------------------------- 1 | # Bool Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries/Boosting_Query.md: -------------------------------------------------------------------------------- 1 | # Boosting Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries/Constant_Score_Query.md: -------------------------------------------------------------------------------- 1 | # Constant Score Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries/Dis_Max_Query.md: -------------------------------------------------------------------------------- 1 | # Dis Max Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries/Function_Score_Query.md: -------------------------------------------------------------------------------- 1 | # Function Score Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Compound_queries/Indices_Query.md: -------------------------------------------------------------------------------- 1 | # Indices Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries.md: -------------------------------------------------------------------------------- 1 | # Full text queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Common_Terms_Query.md: -------------------------------------------------------------------------------- 1 | # Common Terms Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Match_Phrase_Prefix_Query.md: -------------------------------------------------------------------------------- 1 | # Match Phrase Prefix Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Match_Phrase_Query.md: -------------------------------------------------------------------------------- 1 | # Match Phrase Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Match_Query.md: -------------------------------------------------------------------------------- 1 | # Match Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Multi_Match_Query.md: -------------------------------------------------------------------------------- 1 | # Multi Match Query(多匹配查询) 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Query_String_Query.md: -------------------------------------------------------------------------------- 1 | # Query String Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Full_text_queries/Simple_Query_String_Query.md: -------------------------------------------------------------------------------- 1 | # Simple Query String Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Geo_queries.md: -------------------------------------------------------------------------------- 1 | # Geo queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Geo_queries/GeoShape_Query.md: -------------------------------------------------------------------------------- 1 | # GeoShape Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Geo_queries/Geo_Bounding_Box_Query.md: -------------------------------------------------------------------------------- 1 | # Geo Bounding Box Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Geo_queries/Geo_Distance_Query.md: -------------------------------------------------------------------------------- 1 | # Geo Distance Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Geo_queries/Geo_Distance_Range_Query.md: -------------------------------------------------------------------------------- 1 | # Geo Distance Range Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Geo_queries/Geo_Polygon_Query.md: -------------------------------------------------------------------------------- 1 | # Geo Polygon Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Joining_queries.md: -------------------------------------------------------------------------------- 1 | # Joining queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Joining_queries/Has_Child_Query.md: -------------------------------------------------------------------------------- 1 | # Has Child Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Joining_queries/Has_Parent_Query.md: -------------------------------------------------------------------------------- 1 | # Has Parent Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Joining_queries/Nested_Query.md: -------------------------------------------------------------------------------- 1 | # Nested Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Joining_queries/Parent_Id_Query.md: -------------------------------------------------------------------------------- 1 | # Parent Id Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Match_All_Query.md: -------------------------------------------------------------------------------- 1 | # Match All Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Minimum_Should_Match.md: -------------------------------------------------------------------------------- 1 | # Minimum Should Match 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Multi_Term_Query_Rewrite.md: -------------------------------------------------------------------------------- 1 | # Multi Term Query Rewrite 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Query_and_filter_context.md: -------------------------------------------------------------------------------- 1 | # Query and filter context 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries.md: -------------------------------------------------------------------------------- 1 | # Span queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Containing_Query.md: -------------------------------------------------------------------------------- 1 | # Span Containing Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Field_Masking_Query.md: -------------------------------------------------------------------------------- 1 | # Span Field Masking Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_First_Query.md: -------------------------------------------------------------------------------- 1 | # Span First Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Multi_Term_Query.md: -------------------------------------------------------------------------------- 1 | # Span Multi Term Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Near_Query.md: -------------------------------------------------------------------------------- 1 | # Span Near Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Not_Query.md: -------------------------------------------------------------------------------- 1 | # Span Not Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Or_Query.md: -------------------------------------------------------------------------------- 1 | # Span Or Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Term_Query.md: -------------------------------------------------------------------------------- 1 | # Span Term Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Span_queries/Span_Within_Query.md: -------------------------------------------------------------------------------- 1 | # Span Within Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Specialized_queries.md: -------------------------------------------------------------------------------- 1 | # Specialized queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Specialized_queries/More_Like_This_Query.md: -------------------------------------------------------------------------------- 1 | # More Like This Query 2 | 3 | ## 词条选择参数 -------------------------------------------------------------------------------- /Query_DSL/Specialized_queries/Percolate_Query.md: -------------------------------------------------------------------------------- 1 | # Percolate Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Specialized_queries/Script_Query.md: -------------------------------------------------------------------------------- 1 | # Script Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Specialized_queries/Template_Query.md: -------------------------------------------------------------------------------- 1 | # Template Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries.md: -------------------------------------------------------------------------------- 1 | # Term level queries 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Exists_Query.md: -------------------------------------------------------------------------------- 1 | # Exists Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Fuzzy_Query.md: -------------------------------------------------------------------------------- 1 | # Fuzzy Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Ids_Query.md: -------------------------------------------------------------------------------- 1 | # Ids Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Prefix_Query.md: -------------------------------------------------------------------------------- 1 | # Prefix Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Range_Query.md: -------------------------------------------------------------------------------- 1 | # Range Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Regexp_Query.md: -------------------------------------------------------------------------------- 1 | # Regexp Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Term_Query.md: -------------------------------------------------------------------------------- 1 | # Term Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Terms_Query.md: -------------------------------------------------------------------------------- 1 | # Terms Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Type_Query.md: -------------------------------------------------------------------------------- 1 | # Type Query 2 | 3 | -------------------------------------------------------------------------------- /Query_DSL/Term_level_queries/Wildcard_Query.md: -------------------------------------------------------------------------------- 1 | # Wildcard Query 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 发布说明 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-alpha1_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-alpha1 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-alpha1_Release_Notes_Changes_previously_released_in_2.x.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-alpha1 Release Notes (Changes previously released in 2.x) 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-alpha2_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-alpha2 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-alpha3_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-alpha3 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-alpha4_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-alpha4 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-alpha5_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-alpha5 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-beta1_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-beta1 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0-rc1_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0-rc1 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0_Combined_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0 Combined Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.0_GA_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.0 GA Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.1_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.1 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.0.2_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.0.2 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.1.0_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.1.0 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.1.1_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.1.1 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.1.2_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.1.2 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.2.0_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.2.0 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.2.1_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.2.1 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.2.2_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.2.2 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Release_Notes/5.3.0_Release_Notes.md: -------------------------------------------------------------------------------- 1 | # 5.3.0 Release Notes 2 | 3 | -------------------------------------------------------------------------------- /Search_APIs.md: -------------------------------------------------------------------------------- 1 | # 搜索API 2 | 3 | 大多数搜索API是[多索引,多类型](./Search_APIs/Search.md#search-multi-index-type),除了[Explain API](./Search_APIs/Explain_API.md)端点。 4 | 5 | ## 路由 6 | 7 | 当执行搜索时,它将被广播到所有索引/索引分片(副本间轮询)。可以通过提供路由参数来控制哪些分片将被搜索。例如,索引`tweets`时,路由值可以是用户名: 8 | 9 | ```js 10 | POST /twitter/tweet?routing=kimchy 11 | { 12 | "user" : "kimchy", 13 | "postDate" : "2009-11-15T14:12:12", 14 | "message" : "trying out Elasticsearch" 15 | } 16 | ``` 17 | 18 | 在这种情况下,如果要仅搜索特定用户的推文,我们可以将其指定为路由,导致搜索仅触发相关的分片: 19 | 20 | ```js 21 | POST /twitter/tweet/_search?routing=kimchy 22 | { 23 | "query": { 24 | "bool" : { 25 | "must" : { 26 | "query_string" : { 27 | "query" : "some query string here" 28 | } 29 | }, 30 | "filter" : { 31 | "term" : { "user" : "kimchy" } 32 | } 33 | } 34 | } 35 | } 36 | ``` 37 | 38 | 路由参数可以是多值,以逗号分隔的字符串表示。这将导致与路由值匹配的相关分片被命中。 39 | 40 | ## 统计群组 41 | 42 | 搜索可以与统计组相关联,维护每个组的统计信息聚合。稍后可以使用[indices stats](./Indices_APIs/Indices_Stats.md) API进行检索。例如,这是一个搜索请求主体,将请求与两个不同的组相关联: 43 | 44 | ```js 45 | POST /_search 46 | { 47 | "query" : { 48 | "match_all" : {} 49 | }, 50 | "stats" : ["group1", "group2"] 51 | } 52 | ``` 53 | 54 | ## 全局搜索超时 55 | 56 | 个体搜索可以将超时作为[搜索请求正文](./Search_APIs/Request_Body_Search.md)的一部分。由于搜索请求可能来自许多来源,Elasticsearch具有群集级别的全局搜索超时的动态设置,适用于在[搜索请求正文](./Search_APIs/Request_Body_Search.md)中未设置超时的所有搜索请求。默认值没有全局超时。设置键为`search.default_search_timeout`,可以使用[群集更新设置](./Cluster_APIs/Cluster_Update_Settings.md)端点进行设置。将此值设置为`-1`会将全局搜索超时重置为无超时。 57 | 58 | ## 搜索取消 59 | 60 | 可以使用标准[任务取消](./Cluster_APIs/Task_Management_API.md#task-cancellation)机制取消搜索。默认情况下,正在运行的搜索仅检查段边界是否被取消,因此取消可以被大段延迟。通过集群级别设置动态将`search.low_level_cancellation`设置为`true`可以提高搜索取消响应度。然而,它带来了更频繁的取消检查的额外开销,这在大型快速运行的搜索查询上可以是明显的。更改此设置仅影响在进行更改后开始的搜索。 61 | -------------------------------------------------------------------------------- /Search_APIs/Count_API.md: -------------------------------------------------------------------------------- 1 | # Count API 2 | 3 | Count API 允许轻松执行查询并获取该查询的匹配数。 它可以跨一个或多个索引并跨越一个或多个类型执行。 可以使用简单的查询字符串作为参数或使用在请求正文中定义的[Query DSL](../Query_DSL.md)来提供查询。 这里是一个例子: 4 | 5 | ```bash 6 | PUT /twitter/tweet/1?refresh 7 | { 8 | "user": "kimchy" 9 | } 10 | 11 | GET /twitter/tweet/_count?q=user:kimchy 12 | 13 | GET /twitter/tweet/_count 14 | { 15 | "query" : { 16 | "term" : { "user" : "kimchy" } 17 | } 18 | } 19 | ``` 20 | 21 | > 注意 22 | > 23 | > 在正文中发送的查询必须嵌套在查询键中,与[Search API](../Search_APIs/Search.md)相同 24 | 25 | 上面的两个例子都做同样的事情,这是从某个用户的 twitter 索引计数 tweets 的数量。 其结果是: 26 | 27 | ```bash 28 | { 29 | "count" : 1, 30 | "_shards" : { 31 | "total" : 5, 32 | "successful" : 5, 33 | "failed" : 0 34 | } 35 | } 36 | ``` 37 | 38 | 查询是可选的,如果没有提供,它将使用`match_all`来计算所有的文档。 39 | 40 | ## Multi index, Multi type (多索引,多类型) 41 | 42 | count API 可以应用于[多个索引中的多个类型](../Search_APIs/Search.md#search-multi-index-type)。 43 | 44 | ## Request Parameters (请求参数) 45 | 46 | 当使用查询参数`q`执行计数时,传递的查询是使用Lucene查询解析器的查询字符串。 还有其他可以传递的参数: 47 | 48 | 名称 | 描述 49 | ------|------- 50 | `df` | 在查询中未定义字段前缀时使用的默认字段。 51 | `analyzer` | 分析查询字符串时使用的分析器名称。 52 | `default_operator` | 要使用的默认运算符,可以是`AND`或`OR`。 默认为`OR`。 53 | `lenient` | 如果设置为`true`将导致基于格式的失败(例如向数字字段提供文本)被忽略。 默认为`false`。 54 | `lowercase_expanded_terms` | 术语是否自动小写,默认为`true`。 55 | `analyze_wildcard` | 是否分析通配符和前缀查询。 默认为`false`。 56 | `terminate_after` | 每个分片的最大计数,到达时,查询执行将提前终止。 如果设置,响应将具有布尔字段`terminated_early`以指示查询执行是否实际已终止。 默认为无`terminate_after`。 57 | 58 | ## Request Body | (请求主体) 59 | 60 | 计数可以使用其身体内的[Query DSL](../Query_DSL.md)来表达应该执行的查询。 主体内容也可以作为名为`source`的 REST 参数传递。 61 | 62 | HTTP GET 和 HTTP POST 都可以用于以主体执行计数。 由于并不是所有的客户端都支持带主体的 GET,因此也允许 POST。 63 | 64 | ## Distributed (分布式) 65 | 66 | 计数操作在所有分片上广播。 每个 shard id group 选择一个副本并对其执行。 这意味着副本增加了计数的可伸缩性。 67 | 68 | ##Routing (路由) 69 | 70 | 可以指定路由值(路由值的逗号分隔列表),以控制将对哪些分片执行计数请求。 -------------------------------------------------------------------------------- /Search_APIs/Multi_Search_API.md: -------------------------------------------------------------------------------- 1 | # Multi Search API 2 | 3 | Multi search API允许在同一个API中执行多个搜索请求。它的端点是`_msearch`。 4 | 5 | 请求的格式类似于批量API格式,并使用换行符分隔的`JSON(NDJSON)`格式。结构如下(如果特定搜索结束重定向到另一个节点,则结构被特别优化以减少分析): 6 | 7 | ```bash 8 | header\n 9 | body\n 10 | header\n 11 | body\n 12 | ``` 13 | **注意**:最后一行数据必须以换行符`\n`结尾。每个换行符都可以在回车添加`\r`。向这个端点发送请求时,`Content-Type`头应该被设置为`application / x-ndjson`。 14 | 15 | header包括要搜索的 *index/indices* ,可选项有*types*,`search_type`, `preference` 和 `routing`。 正文包括典型的搜索正文请求(包括`query`, `aggregations`, `from`, `size` 等)。 这里是一个例子: 16 | 17 | ```bash 18 | $ cat requests 19 | {"index" : "test"} 20 | {"query" : {"match_all" : {}}, "from" : 0, "size" : 10} 21 | {"index" : "test", "search_type" : "dfs_query_then_fetch"} 22 | {"query" : {"match_all" : {}}} 23 | {} 24 | {"query" : {"match_all" : {}}} 25 | 26 | {"query" : {"match_all" : {}}} 27 | {"search_type" : "dfs_query_then_fetch"} 28 | {"query" : {"match_all" : {}}} 29 | ``` 30 | 31 | ```bash 32 | $ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch --data-binary "@requests"; echo 33 | ``` 34 | 35 | 注意,上面包括也被支持的空标题(也可以只是没有任何内容)的示例。 36 | 37 | 该响应返回一个响应数组,其中包括每个搜索请求的搜索响应和状态代码,与其在原始 multi search 请求中的顺序相匹配。 如果该特定搜索请求的完全失败,将返回具有错误消息和相应状态代码的对象,而不是实际的搜索响应。 38 | 39 | 端点还允许对URI中的 index/indices 和 type/types 进行搜索,在这种情况下,它将被用作默认值,除非在标题中另有明确定义。 例如: 40 | 41 | ```bash 42 | GET twitter/_msearch 43 | {} 44 | {"query" : {"match_all" : {}}, "from" : 0, "size" : 10} 45 | {} 46 | {"query" : {"match_all" : {}}} 47 | {"index" : "twitter2"} 48 | {"query" : {"match_all" : {}}} 49 | ``` 50 | 51 | 以上将针对所有未定义索引的请求执行针对`twitter`索引的搜索,最后一个针对`twitter2`索引执行。 52 | 53 | ` search_type`可以以类似的方式设置为全局应用于所有搜索请求。 54 | 55 | msearch的`max_concurrent_searches`请求参数可用于控制多搜索api将执行的最大并发搜索数。此默认值基于数据节点的数量和默认搜索线程池大小。 56 | 57 | ## 安全 58 | 59 | 请查看[URL-based access control](../API_Conventions/URL-based_access_control.md) 60 | 61 | 62 | ## 模板支持 63 | 64 | 就像`_search`资源的[搜索模板](./Search_Template.md)中所述,`_msearch`也提供对模板的支持。提交他们如下所示: 65 | 66 | ```bash 67 | GET _msearch/template 68 | {"index" : "twitter"} 69 | { "inline" : "{ \"query\": { \"match\": { \"message\" : \"{{keywords}}\" } } } }", "params": { "query_type": "match", "keywords": "some message" } } 70 | {"index" : "twitter"} 71 | { "inline" : "{ \"query\": { \"match_{{template}}\": {} } }", "params": { "template": "all" } } 72 | ``` 73 | 74 | 为内联模板。 您也可以创建搜索模板: 75 | 76 | ```bash 77 | POST /_search/template/my_template_1 78 | { 79 | "template": { 80 | "query": { 81 | "match": { 82 | "message": "{{query_string}}" 83 | } 84 | } 85 | } 86 | } 87 | ``` 88 | 89 | ```bash 90 | POST /_search/template/my_template_2 91 | { 92 | "template": { 93 | "query": { 94 | "term": { 95 | "{{field}}": "{{value}}" 96 | } 97 | } 98 | } 99 | } 100 | ``` 101 | 102 | 然后在_msearch使用它们: 103 | 104 | ```bash 105 | GET _msearch/template 106 | {"index" : "main"} 107 | { "id": "my_template_1", "params": { "query_string": "some message" } } 108 | {"index" : "main"} 109 | { "id": "my_template_2", "params": { "field": "user", "value": "test" } } 110 | ``` -------------------------------------------------------------------------------- /Search_APIs/Multi_Search_Template.md: -------------------------------------------------------------------------------- 1 | # Multi Search Template 2 | 3 | 多搜索(Multi Search)模板 API 允许使用`_msearch/template`端点在同一个`API`中执行多个搜索模板请求。 4 | 5 | 以下请求形式与[Multi Search API](./Multi_Search_API.md)形式相似: 6 | 7 | ```js 8 | header\n 9 | body\n 10 | header\n 11 | body\n 12 | ``` 13 | 14 | `header`部分与一般的Multi Search API支持相同的`index`,`types`,`search_type`,`preference`和`routing`选项。 15 | 16 | `body`部分包含一个搜索模板`body`请求,并且支持`inline`,存储和文件模板。比如: 17 | 18 | ```bash 19 | $ cat requests 20 | {"index": "test"} 21 | {"inline": {"query": {"match": {"user" : "{{username}}" }}}, "params": {"username": "john"}} # ① 22 | {"index": "_all", "types": "accounts"} 23 | {"inline": {"query": {"{{query_type}}": {"name": "{{name}}" }}}, "params": {"query_type": "match_phrase_prefix", "name": "Smith"}} 24 | {"index": "_all"} 25 | {"id": "template_1", "params": {"query_string": "search for these words" }} # ② 26 | {"types": "users"} 27 | {"file": "template_2", "params": {"field_name": "fullname", "field_value": "john smith" }} # ③ 28 | 29 | $ curl -XGET localhost:9200/_msearch/template --data-binary "@requests"; echo 30 | ``` 31 | 32 | ① `inline`搜索模板请求 33 | ________________________ 34 | ② 基于存储模板的搜索模板请求 35 | ________________________ 36 | ③ 基于文件模板的搜索模板请求 37 | ________________________ 38 | 39 | 响应返回一个`responses`数组,其中包括每个搜索模板请求的搜索模板响应,该响应匹配其在原始多搜索模板请求中的顺序。如果该特定搜索模板请求的完全失败,将返回`error`消息的对象,而不是实际的搜索响应。 -------------------------------------------------------------------------------- /Search_APIs/Percolator.md: -------------------------------------------------------------------------------- 1 | # Percolator 2 | 3 | > **警告** 4 | > 5 | > ## 5.0.0已废弃 6 | > `Percolate`与`multi percolate` APIs已废弃,请使用新的[percolate query](../Query_DSL/Specialized_queries/Percolate_Query.md) 7 | 8 | 对于版本`5.0.0-alpha1`或之后创建的索引,过滤器自动将查询条件与过滤器查询进行索引。这使得渗滤器能够更快速地渗透文件。建议重新创建任何`5.0.0`之前的索引库以利用这一新的优化。 -------------------------------------------------------------------------------- /Search_APIs/Profile_API/Profiling_Aggregations.md: -------------------------------------------------------------------------------- 1 | # Profiling Aggregations 2 | 3 | ## 聚合部分/aggregations Section 4 | 5 | 聚合部分(aggregations)包含在一个特定的分块执行生成的聚合树的详细时序。这种聚合树的整体结构类似于原来的Elasticsearch的请求。让我们分析以下示例聚合请求: 6 | 7 | ```bash 8 | GET /house-prices/_search 9 | { 10 | "profile": true, 11 | "size": 0, 12 | "aggs": { 13 | "property_type": { 14 | "terms": { 15 | "field": "propertyType" 16 | }, 17 | "aggs": { 18 | "avg_price": { 19 | "avg": { 20 | "field": "price" 21 | } 22 | } 23 | } 24 | } 25 | } 26 | } 27 | ``` 28 | 这导致下列的聚合探查(aggregation profile)输出 29 | 30 | ```js 31 | "aggregations": [ 32 | { 33 | "type": "org.elasticsearch.search.aggregations.bucket.terms.GlobalOrdinalsStringTermsAggregator", 34 | "description": "property_type", 35 | "time": "4280.456978ms", 36 | "time_in_nanos": "4280456978", 37 | "breakdown": { 38 | "reduce": 0, 39 | "reduce_count": 0, 40 | "build_aggregation": 49765, 41 | "build_aggregation_count": 300, 42 | "initialise": 52785, 43 | "initialize_count": 300, 44 | "collect": 3155490036, 45 | "collect_count": 1800 46 | }, 47 | "children": [ 48 | { 49 | "type": "org.elasticsearch.search.aggregations.metrics.avg.AvgAggregator", 50 | "description": "avg_price", 51 | "time": "1124.864392ms", 52 | "time_in_nanos": "1124864392", 53 | "breakdown": { 54 | "reduce": 0, 55 | "reduce_count": 0, 56 | "build_aggregation": 1394, 57 | "build_aggregation_count": 150, 58 | "initialise": 2883, 59 | "initialize_count": 150, 60 | "collect": 1124860115, 61 | "collect_count": 900 62 | } 63 | } 64 | ] 65 | } 66 | ] 67 | ``` 68 | 69 | 根据探查(Profile)的结构,我们可以看到聚合property_type内部由GlobalOrdinalsStringTermsAggregator类表示及子聚合avg_price内部由AvgAggregato类表示。 70 | 71 | 时间字段(time)显示,整个聚合要花费4秒执行。记录的时间包括所有孩子节点。 72 | 73 | 崩溃字段(breakdown)给出时间如何花费的详细数据,我们一眼可以看到它。最后,孩子(children)的数组列表列出了所有可能出现的子聚合。因为我们有一个属于property_type的子聚合avg_price,我们可以看到,它被列为聚合property_type的孩子。两个聚合的输出有相同的信息(类型、时间、故障等)。孩子(children)可以嵌套自己的孩子(children)。 74 | 75 | ## 定时故障/Timing Breakdown 76 | 77 | 故障组件(breakdown )列出了关于低级别Lucene执行的详细时序统计信息: 78 | 79 | ```bash 80 | "breakdown": { 81 | "reduce": 0, 82 | "reduce_count": 0, 83 | "build_aggregation": 49765, 84 | "build_aggregation_count": 300, 85 | "initialise": 52785, 86 | "initialize_count": 300, 87 | "collect": 3155490036, 88 | "collect_count": 1800 89 | } 90 | ``` 91 | 时间信息用网络挂钟的纳秒列出来,且不规范化。所有关于时间的警告均适用于这里。崩溃字段 (breakdown)的意图是让你感觉到(A)Elasticsearch的运转实际上耗费时间的,(B)各部件耗费时间的差异是非常大的。像总的时间一样,故障包含所有孩子的时间。 92 | 93 | 该属性的含义如下: 94 | 95 | ## 所有的参数:/All parameters: 96 | 97 | 名称 | 描述 98 | -----|-------- 99 | `initialise` | 在开始收集文件前,创建和初始化聚合所需要的时间。 100 | `collect` | 这表示聚合部分的聚合阶段累积所花时间。这是匹配的文档传递到聚合的地方,且聚合状态是基于文档中所包含信息的进行更新的。 101 | `build_aggregation` | 这代表了聚合部分在文档集合完毕后准备回传到减少节点产生的创造碎片级别的时间。 102 | `reduce` | 这不是目前使用的,而且总是会报告0。目前聚合探查(aggregation profiling)只计时部分聚合执行的碎片水平。 减少阶段的计时将稍后添加。 103 | `*_count` | 记录的特定方法的调用次数。例如,`"collect_count": 2`,意味着`collect()`方法被两个不同的文件调用。 -------------------------------------------------------------------------------- /Search_APIs/Profile_API/Profiling_Considerations.md: -------------------------------------------------------------------------------- 1 | # Profiling Considerations 2 | 3 | ## 性能说明/Performance Notes 4 | 5 | 和任何探查器(Profiler)一样,Profile API为搜索执行引入了一个不可忽略的开销。检测低水平的方法调用的行为,如收集(collect),提前(advance)和下一个文档(next_doc)开销非常大,因为这些方法被称为紧环。因此,默认情况下不应在生产设置中启用探查(profiling),不应与非探查(profile)的查询时间进行比较。探查(Profiling)只是一个诊断工具。 6 | 7 | 也有特殊Lucene优化被禁用的情况,因为它们是不适合探查(Profiling)。这可能会导致相比非探查形态,某些查询会报告较大的相关时间,但一般来说,和其他组件相比,在探查查询(profiled query.)中的应该不会有剧烈的影响。 8 | 9 | ## 局限性/Limitations 10 | 11 | - 探查(Profiling)的分析统计目前不提供给`suggestions`,高亮(`highlighting`), `dfs_query_then_fetch`。 12 | - 聚集的减少阶段的探查(Profiling)目前不可用。 13 | - 探查器(Profiler)仍然处于实验阶段。作为Lucene的检测部分,探查器(Profiler)从未被设计成以这种方式暴露出去,所以所有的结果都应该被看作提供详细诊断的最大努力。我们希望随着时间的不断推进改善这个模块。如果您发现明显错误的数字,奇怪的查询结构或其他错误,请提交报告。 -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search.md: -------------------------------------------------------------------------------- 1 | # Request Body Search(使用请求体进行搜索) 2 | 3 | 搜索请求能够通过DSL来执行,在请求体中包含这个[查询DSL](../Query_DSL.md)即可。下面是一个示例: 4 | 5 | ```js 6 | GET /twitter/tweet/_search 7 | { 8 | "query" : { 9 | "term" : { "user" : "kimchy" } 10 | } 11 | } 12 | ``` 13 | 14 | 这是一个示例的响应: 15 | 16 | ```js 17 | { 18 | "took": 1, 19 | "timed_out": false, 20 | "_shards":{ 21 | "total" : 1, 22 | "successful" : 1, 23 | "failed" : 0 24 | }, 25 | "hits":{ 26 | "total" : 1, 27 | "max_score": 1.3862944, 28 | "hits" : [ 29 | { 30 | "_index" : "twitter", 31 | "_type" : "tweet", 32 | "_id" : "0", 33 | "_score": 1.3862944, 34 | "_source" : { 35 | "user" : "kimchy", 36 | "message": "trying out Elasticsearch", 37 | "date" : "2009-11-15T14:12:12", 38 | "likes" : 0 39 | } 40 | } 41 | ] 42 | } 43 | } 44 | ``` 45 | 46 | ## 参数 47 | 48 | 参数名 | 描述 49 | ----------------------|------------------- 50 | `timeout` | 搜索超时,限制在指定时间值内执行的搜索请求,并在到期时收集的命中文档。默认为无超时。请参阅[时间单位](../API_Conventions/Common_options.md#time-units)一节。 51 | `from` | 从某个偏移量中检索匹配。默认为0。 52 | `size` | 要返回的命中数。默认为`10.`如果您不关心获取到的一些返回内容,但仅关注匹配或聚合的数量,将值设置为`0`将有助于提高性能。 53 | `search_type` | 要执行的搜索操作的类型。可以是`dfs_query_then_fetch`或`query_then_fetch`。默认为`query_then_fetch`。查看*搜索类型*了解更多。 54 | `request_cache` | 设置为`true`或`false`以启用或禁用在搜索请求`size`为`0`时的结果缓存,即聚合和建议(不返回顶部`hits`内容)。请参阅[Shard请求缓存](../Modules/Indices/Shard_request_cache.md)。 55 | `terminate_after` | 每个分片收集的最大文档数量,达到后查询执行将提前终止。如果设置,响应将有一个布尔字段`terminate_early`来指示查询执行是否实际已终止。默认为`terminate_after`。 56 | `batched_reduce_size` | 分片结果的数量应该在协调节点上一次性减少。如果请求中潜在的分片数量可能较大,则该值应用作保护机制,以减少每个搜索请求的内存开销。 57 | 58 | 在上述中,`search_type`和`request_cache`必须作为查询字符串参数传递。搜索请求的其余部分应在主体本身内传递。请求体内容也可以作为名为`source`的REST参数传递。 59 | 60 | `HTTP GET`和`HTTP POST`都可以用来执行与`body`的搜索。由于并非所有客户端都支持`GET`,所以`POST`也是允许的。 61 | 62 | ## 速检查任何匹配的文档 63 | 64 | 如果我们只想知道是否有匹配特定查询的文档,我们可以将大小设置为`0`,表示我们对搜索结果不感兴趣。此外,我们可以将`terminate_after`设置为`1`,以指示每当找到第一个匹配文档(每个分片)时,查询执行可以被终止。 65 | 66 | ```js 67 | GET /_search?q=message:elasticsearch&size=0&terminate_after=1 68 | ``` 69 | 70 | 响应不会包含大小设置为`0`的任何采样。`hits.total`等于`0`表示没有匹配的文档,或大于`0`表示至少有与查询匹配的数量的文档(当它被提前终止时)。此外,如果查询提前终止,则在响应中将`terminate_early`标志设置为`true`。 71 | 72 | ```js 73 | { 74 | "took": 3, 75 | "timed_out": false, 76 | "terminated_early": true, 77 | "_shards": { 78 | "total": 1, 79 | "successful": 1, 80 | "failed": 0 81 | }, 82 | "hits": { 83 | "total": 1, 84 | "max_score": 0.0, 85 | "hits": [] 86 | } 87 | } 88 | ``` -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Doc_value_Fields.md: -------------------------------------------------------------------------------- 1 | # Doc value Fields 2 | 3 | 允许返回每个匹配的字段的[doc value](../..//Mapping/Mapping_parameters/doc_values.md)表示形式,例如: 4 | 5 | ```js 6 | GET /_search 7 | { 8 | "query" : { 9 | "match_all": {} 10 | }, 11 | "docvalue_fields" : ["test1", "test2"] 12 | } 13 | ``` 14 | 15 | Doc value Fields 可以用于未存储的字段。 16 | 17 | 请注意,如果`fields`参数指定没有`docvalues`的字段,它将尝试从`fielddata`缓存加载值,使得该字段的词条被加载到内存(缓存),这将导致更多的内存消耗。 -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Explain.md: -------------------------------------------------------------------------------- 1 | # Explain 2 | 3 | 开启执行计划可以查看每个命中文档是如何评分的。 4 | 5 | ``` 6 | GET /_search 7 | { 8 | "explain": true, 9 | "query" : { 10 | "term" : { "user" : "kimchy" } 11 | } 12 | } 13 | ``` -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Field_Collapsing.md: -------------------------------------------------------------------------------- 1 | # Field Collapsing(字段折叠) 2 | 3 | 允许基于字段对结果进行折叠。折叠操作是通过每个选择每个折叠键的顶部文档来实现的。例如下面的query获取每个user的最佳tweet并且根据他们的likes数量排序。 4 | 5 | ```bash 6 | GET /twitter/tweet/_search 7 | { 8 | "query": { 9 | "match": { 10 | "message": "elasticsearch" 11 | } 12 | }, 13 | "collapse" : { 14 | "field" : "user" # ① 15 | }, 16 | "sort": ["likes"], # ② 17 | "from": 10 # ③ 18 | } 19 | ``` 20 | ① 使用user字段来折叠结果集 21 | ___________________________ 22 | ② 按照likes数量进行排序获取顶部文档 23 | ___________________________ 24 | ③ 定义第一个折叠结果的偏移量 25 | ___________________________ 26 | 27 | > **警告:** 28 | > 29 | > 响应结果中的hits总数表示匹配的文档总数而不是折叠的,去重后的聚合总数是未知的。 30 | 31 | 用于折叠的字段必须是单值的[keyword](../../Mapping/Field_datatypes/Keyword_datatype.md)或[numeric](../../Mapping/Field_datatypes/Numeric_datatypes.md)字段并开启[doc_values](../..//Mapping/Mapping_parameters/doc_values.md)(文档值)。 32 | 33 | > 注意: 34 | > 35 | > 折叠只应用于顶部文档,而且不会影响聚合。 36 | 37 | ## 展开折叠的显示结果 38 | 39 | 它也可以通过`inner_hits`参数来展开每个折叠的顶部文档。 40 | 41 | ```bash 42 | GET /twitter/tweet/_search 43 | { 44 | "query": { 45 | "match": { 46 | "message": "elasticsearch" 47 | } 48 | }, 49 | "collapse" : { 50 | "field" : "user", # ① 51 | "inner_hits": { 52 | "name": "last_tweets", # ② 53 | "size": 5, # ③ 54 | "sort": [{ "date": "asc" }] # ④ 55 | }, 56 | "max_concurrent_group_searches": 4 # ⑤ 57 | }, 58 | "sort": ["likes"] 59 | } 60 | ``` 61 | 62 | ① 使用"user"字段折叠结果集 63 | ___________________________ 64 | ② name参数用来分割结果响应中的inner_hits 65 | ___________________________ 66 | ③ 每个折叠内inner_hits检索到的数目 67 | ___________________________ 68 | ④ 每个分组的排序方式 69 | ___________________________ 70 | ⑤ 每个分组内允许检索inner_hits的并发请求数量 71 | ___________________________ 72 | 73 | 查看[inner hits](./Inner_hits.md)对于所支持的选项的完整列表和响应的格式。 74 | 75 | 该分组的扩展是通过向响应中返回的每个折叠的命中发送一个额外的查询来完成的。请求参数`max_concurrent_group_searches`可用于控制这个阶段并发搜索的最大数量。 默认值是基于数据节点的数量和默认的搜索线程池大小。 76 | 77 | > **警告:** 78 | > 79 | > `collapse`(折叠)不能用于与[scroll](./Scroll.md), [rescore](./Rescoring.md), [search after](./Search_After.md)一同使用。 -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Fields.md: -------------------------------------------------------------------------------- 1 | # Fields 2 | 3 | > 警告 4 | > 5 | > `stored_fields`参数是关于显式标记为存储在映射中的字段,默认情况下关闭,通常不推荐。 使用[源过滤](./Source_filtering.md)来选择要返回的原始源文档的子集。 6 | 7 | 允许有选择地加载搜索匹配所表示的每个文档的特定存储字段。 8 | 9 | ```js 10 | GET /_search 11 | { 12 | "stored_fields" : ["user", "postDate"], 13 | "query" : { 14 | "term" : { "user" : "kimchy" } 15 | } 16 | } 17 | ``` 18 | 19 | `*`可用于从文档加载所有存储的字段。 20 | 21 | 空数组只会为每个匹配返回`_id`和`_type`,例如: 22 | 23 | ```js 24 | GET /_search 25 | { 26 | "stored_fields" : [], 27 | "query" : { 28 | "term" : { "user" : "kimchy" } 29 | } 30 | } 31 | ``` 32 | 33 | 如果请求的字段未存储(`store`映射设置为`false`),它们将被忽略。 34 | 35 | 从文档本身获取的存储字段值总是作为数组返回。 相反,诸如`_routing`和`_parent`字段的元数据字段从不作为数组返回。 36 | 37 | 此外,只有叶子字段(leaf field)可以通过字段选项返回。 因此,无法返回对象字段,并且此类请求将失败。 38 | 39 | 脚本字段也可以自动检测并用作字段,所以像`_source.obj1.field1`这样的东西可以使用,虽然不推荐,因为`obj1.field1`也会工作。 40 | 41 | ## 完全禁用存储字段 42 | 43 | 要禁用存储的字段(和元数据字段),请完全使用`_none_`: 44 | 45 | ```js 46 | GET /_search 47 | { 48 | "stored_fields": "_none_", 49 | "query" : { 50 | "term" : { "user" : "kimchy" } 51 | } 52 | } 53 | ``` 54 | 55 | > 注意 56 | > 57 | > 如果使用`_none_` , 则[_source](./Source_filtering.md)和[version](./Version.md)参数将不可用。 58 | -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/From_Size.md: -------------------------------------------------------------------------------- 1 | # From / Size 2 | 3 | 结果的分页可以通过使用`from`和`size`参数来完成。 `from`参数定义了您要提取的第一个结果的偏移量。 `size`参数允许您配置要返回的最大匹配数。 4 | 5 | 虽然`from`和`size`可以设置为请求参数,但它们也可以在搜索正文中设置。`from`默认值为`0`,`size`默认为`10`。 6 | 7 | ```js 8 | GET /_search 9 | { 10 | "from" : 0, "size" : 10, 11 | "query" : { 12 | "term" : { "user" : "kimchy" } 13 | } 14 | } 15 | ``` 16 | 17 | 注意`from + size`不能超过索引设置的`index.max_result_window`,默认为`10000`。 有关深入滚动的更有效方法,请参阅[Scroll](./Scroll.md)或[Search After](Search_After.md) API。 18 | -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Index_Boost.md: -------------------------------------------------------------------------------- 1 | # Index Boost 2 | 3 | 允许在跨多个索引库进行搜索时为每个索引配置不同的权重。当来自一个索引的命中事件超过来自另一个索引命中事件时(这意味着每个用户都有索引的社交图),这非常方便。 4 | 5 | ```bash 6 | GET /_search 7 | { 8 | "indices_boost" : { 9 | "index1" : 1.4, 10 | "index2" : 1.3 11 | } 12 | } 13 | ``` -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Named_Queries.md: -------------------------------------------------------------------------------- 1 | # Named Queries 2 | 3 | 每个过滤器和查询可以在其顶级定义中接受一个`_name`。 4 | 5 | ```bash 6 | GET /_search 7 | { 8 | "query": { 9 | "bool" : { 10 | "should" : [ 11 | {"match" : { "name.first" : {"query" : "shay", "_name" : "first"} }}, 12 | {"match" : { "name.last" : {"query" : "banon", "_name" : "last"} }} 13 | ], 14 | "filter" : { 15 | "terms" : { 16 | "name.last" : ["banon", "kimchy"], 17 | "_name" : "test" 18 | } 19 | } 20 | } 21 | } 22 | } 23 | ``` 24 | 25 | 搜索响应将为每个匹配项添加其匹配的`matched_queries`。 查询和过滤器的标记仅对`bool`查询有意义。 26 | -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Post_filter.md: -------------------------------------------------------------------------------- 1 | # Post filter(后置过滤) 2 | 3 | 在已经计算了聚合之后,`post_filter`应用于搜索请求最后的搜索结果`hits`。其目的最好的例子如下: 4 | 5 | 想像一下,您正在销售具有以下属性的衬衫: 6 | 7 | ```js 8 | PUT /shirts 9 | { 10 | "mappings": { 11 | "item": { 12 | "properties": { 13 | "brand": { "type": "keyword"}, 14 | "color": { "type": "keyword"}, 15 | "model": { "type": "keyword"} 16 | } 17 | } 18 | } 19 | } 20 | 21 | PUT /shirts/item/1?refresh 22 | { 23 | "brand": "gucci", 24 | "color": "red", 25 | "model": "slim" 26 | } 27 | ``` 28 | 29 | 想象一下,用户已经指定了两个过滤器: 30 | 31 | `color:red`与`brand:gucci`。你只想在搜索结果中显示 Gucci 制作的红色衬衫。 通常你会使用[布尔查询](../..//Query_DSL/Compound_queries/Bool_Query.md): 32 | 33 | ```js 34 | GET /shirts/_search 35 | { 36 | "query": { 37 | "bool": { 38 | "filter": [ 39 | { "term": { "color": "red" }}, 40 | { "term": { "brand": "gucci" }} 41 | ] 42 | } 43 | } 44 | } 45 | ``` 46 | 47 | 但是,您也可以使用分面导航来显示用户可以点击的其他选项的列表。也许你有一个`model`字段,允许用户将他们的搜索结果限制在红色的Gucci `t-shirts`或者`dress-shirts`。 48 | 49 | 这可以通过[terms aggregation]()来完成: 50 | 51 | ```js 52 | GET /shirts/_search 53 | { 54 | "query": { 55 | "bool": { 56 | "filter": [ 57 | { "term": { "color": "red" }}, 58 | { "term": { "brand": "gucci" }} 59 | ] 60 | } 61 | }, 62 | "aggs": { 63 | "models": { 64 | "terms": { "field": "model" } //① 65 | } 66 | } 67 | } 68 | ``` 69 | 70 | ① 返回Gucci最受欢迎的红色衬衫款式。 71 | 72 | 但也许你也想告诉用户Gucci衬衫有多少可用的**其他颜色**。 如果只是在`color`字段上添加`terms`聚合,则只会返回`红色`,因为您的查询只返回Gucci的红色衬衫。 73 | 74 | 相反,您希望在聚合期间包括所有颜色的衬衫,然后仅将颜色过滤器应用于搜索结果。 这是 `post_filter`的目的: 75 | 76 | ```js 77 | GET /shirts/_search 78 | { 79 | "query": { 80 | "bool": { 81 | "filter": { 82 | "term": { "brand": "gucci" } //① 83 | } 84 | } 85 | }, 86 | "aggs": { 87 | "colors": { 88 | "terms": { "field": "color" } //② 89 | }, 90 | "color_red": { 91 | "filter": { 92 | "term": { "color": "red" } //③ 93 | }, 94 | "aggs": { 95 | "models": { 96 | "terms": { "field": "model" } //④ 97 | } 98 | } 99 | } 100 | }, 101 | "post_filter": { //⑤ 102 | "term": { "color": "red" } 103 | } 104 | } 105 | ``` 106 | 107 |   |   108 | ------------|--------------- 109 | ① | 主查询现在查找 Gucci 的所有衬衫,而不考虑颜色。 110 | ② | `colors`聚合返回 Gucci 的衬衫的流行颜色。 111 | ③,④ | `color_red`聚合将限制在`red` Gucci 衬衫下进行款式子聚合 112 | ⑤ | 最后,`post_filter`从搜索`hits`中除去红色以外的颜色。 113 | 114 | -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Preference.md: -------------------------------------------------------------------------------- 1 | # Preference 2 | 3 | `perference`可以控制执行搜索请求的分片副本。默认情况下,操作在分片副本之间是随机化的。 4 | 5 | `preference`是一个查询字符串参数,可以设置为: 6 | 7 | 值选项 | 说明 8 | ----------|--------------- 9 | `_primary` | 操作将继续并只在主分片上执行。 10 | `_primary_first` | 操作将在主分片上执行,如果不可用(故障转移),将在其他分片上执行。 11 | `_replica` | 该操作将只在副本分片上执行。 12 | `_replica_first`| 操作将移动并仅在副本分片上执行,如果不可用(故障转移),则将在其他分片上执行。 13 | `_local` | 如果可能,操作将优选在本地分配的分片上执行。 14 | `_prefer_nodes:abc,xyz` | 在适用的情况下,在具有提供的节点标识(本例中为`abc`或`xyz`)的节点上优先执行。 15 | `_shards:2,3` | 将操作限制为指定的分片。(在这种情况下为`2`和`3`)。此首选项可以与其他首选项组合,但必须首先显示:`_shards:2,3|_primary` 16 | `_only_nodes` | 将操作限制在节点说明中[指定的节点](../../Cluster_APIs.md) 17 | Custom (string) value| 自定义值将用于保证相同的自定义值使用相同的分片。当在不同的刷新状态中匹配不同的分片时,这可以帮助“跳跃值”。示例值可以是Web的`session id`或`user name`。 18 | 19 | 例如,使用用户的`session id`来确保用户的结果的一致排序: 20 | 21 | ```bash 22 | GET /_search?preference=xyzabc123 23 | { 24 | "query": { 25 | "match": { 26 | "title": "elasticsearch" 27 | } 28 | } 29 | } 30 | ``` 31 | -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Query.md: -------------------------------------------------------------------------------- 1 | # Query 2 | 3 | 查询请求体中的`query`元素允许通过[Query DSL](../../Query_DSL.md)来定义一个查询。 4 | 5 | ```js 6 | GET /_search 7 | { 8 | "query" : { 9 | "term" : { "user" : "kimchy" } 10 | } 11 | } 12 | ``` -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Rescoring.md: -------------------------------------------------------------------------------- 1 | # Rescoring 2 | 3 | 在使用[query](./Query.md)与[post_filter](./Post_filter.md)语法重新排序返回顶部文档时(例如100-500),使用二次算法(通常跟昂贵), 4 | 而不是将昂贵的算法应用于索引中的所有文档。Rescoring能帮助提升精度。 5 | 6 | `rescore`请求将在每个分片上执行,然后返回其结果,以便由处理整个搜索请求的节点来进行排序。 7 | 8 | 目前`rescore`API只有一个实现:`query rescorer`,它使用查询来调整评分。将来,可以提供备选的`rescorer`,例如,`pair-wise rescorer`。 9 | 10 | > 注意: 11 | > 12 | > 在使用[sort](./Sort.md)时,`rescore`语法将不执行。 13 | 14 | > 注意: 15 | > 16 | > 当向用户展示分页时,您不应该在逐步浏览每个页面(通过传递不同的值)时更改`window_size`,因为这可能会改变顶部匹配,导致结果在用户逐步浏览页面时发生混乱。 17 | 18 | ## Query rescorer 19 | 20 | `Query rescorer`仅对[query](./Query.md)与[post_filter](./Post_filter.md)阶段返回的`Top-K`结果执行第二次查询。 在每个分片上检查的文档数量可以由`window_size`参数控制,默认为[from和size](./From_Size.md)。 21 | 22 | 默认情况下,原始查询和`rescore`查询的分数线性组合,以产生每个文档的最终`_score`。 原始查询和`rescore`查询的相对重要性可以分别使用`query_weight`和`rescore_query_weight`进行控制。 两者默认为`1`。 23 | 24 | 例如: 25 | 26 | ```bash 27 | curl -s -XPOST 'localhost:9200/_search' -d '{ 28 | "query" : { 29 | "match" : { 30 | "field1" : { 31 | "operator" : "or", 32 | "query" : "the quick brown", 33 | "type" : "boolean" 34 | } 35 | } 36 | }, 37 | "rescore" : { 38 | "window_size" : 50, 39 | "query" : { 40 | "rescore_query" : { 41 | "match" : { 42 | "field1" : { 43 | "query" : "the quick brown", 44 | "type" : "phrase", 45 | "slop" : 2 46 | } 47 | } 48 | }, 49 | "query_weight" : 0.7, 50 | "rescore_query_weight" : 1.2 51 | } 52 | } 53 | } 54 | ' 55 | ``` 56 | 57 | 组合得分的方式可以用`score_mode`控制: 58 | 59 | Score Mode | Description 60 | ----------|---------------------- 61 | avg | 平均原始分数和 rescore 查询分数。 62 | max | 取最初的分数和 rescore 查询分数。 63 | min | 取最初的分数和 rescore 查询分数。 64 | multiply | 将原始分数乘以 rescore 查询分数。 用于函数查询 rescores。 65 | total | 添加原始分数和 rescore 查询分数。 默认值。 66 | 67 | ## Multiple Rescores 68 | 69 | 也可以按顺序执行多个`rescores`: 70 | 71 | ```bash 72 | curl -s -XPOST 'localhost:9200/_search' -d '{ 73 | "query" : { 74 | "match" : { 75 | "field1" : { 76 | "operator" : "or", 77 | "query" : "the quick brown", 78 | "type" : "boolean" 79 | } 80 | } 81 | }, 82 | "rescore" : [ { 83 | "window_size" : 100, 84 | "query" : { 85 | "rescore_query" : { 86 | "match" : { 87 | "field1" : { 88 | "query" : "the quick brown", 89 | "type" : "phrase", 90 | "slop" : 2 91 | } 92 | } 93 | }, 94 | "query_weight" : 0.7, 95 | "rescore_query_weight" : 1.2 96 | } 97 | }, { 98 | "window_size" : 10, 99 | "query" : { 100 | "score_mode": "multiply", 101 | "rescore_query" : { 102 | "function_score" : { 103 | "script_score": { 104 | "script": { 105 | "lang": "painless", 106 | "inline": "Math.log10(doc['numeric'].value + 2)" 107 | } 108 | } 109 | } 110 | } 111 | } 112 | } ] 113 | } 114 | ' 115 | ``` 116 | 117 | 第一个获得查询的结果,第二个获得第一个的结果等。第二个`rescore`将 “see” 由第一个`rescore`完成排序,因此可以在第一个`rescore`上使用大窗口 将文档拖动到较小的窗口中,以便第二个文件。 -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Script_Fields.md: -------------------------------------------------------------------------------- 1 | # Script Fields 2 | 3 | 允许为每次匹配返回[脚本评估](./Modules/Scripting.md)(基于不同的字段),例如: 4 | 5 | ```js 6 | GET /_search 7 | { 8 | "query" : { 9 | "match_all": {} 10 | }, 11 | "script_fields" : { 12 | "test1" : { 13 | "script" : { 14 | "lang": "painless", 15 | "inline": "doc['my_field_name'].value * 2" 16 | } 17 | }, 18 | "test2" : { 19 | "script" : { 20 | "lang": "painless", 21 | "inline": "doc['my_field_name'].value * factor", 22 | "params" : { 23 | "factor" : 2.0 24 | } 25 | } 26 | } 27 | } 28 | } 29 | ``` 30 | 31 | 脚本字段可以用于未存储的字段(在上述情况下为`my_field_name`),并允许返回要返回的自定义值(脚本的计算值)。 32 | 33 | 脚本字段也可以访问实际的_source文档,并通过使用`params['_ source']`提取要返回的特定元素。这是一个例子: 34 | 35 | ```js 36 | GET /_search 37 | { 38 | "query" : { 39 | "match_all": {} 40 | }, 41 | "script_fields" : { 42 | "test1" : { 43 | "script" : "params['_source']['message']" 44 | } 45 | } 46 | } 47 | ``` 48 | 49 | 注意`_source`关键字在这里用于导航`json`样模型。 50 | 51 | 了解`doc['my_field'].value`和`params['_source'][my_field]`之间的区别很重要。 第一个,使用`doc`关键字,将导致该字段的词条被加载到内存(缓存),这将导致更快的执行,但更多的内存消耗。 此外,`doc[...]`符号只允许简单的有价值的字段(不能从它返回一个`json`对象),并且只对非分析或单个词条的字段有意义。但是如果可能,使用`doc`仍然是从文档访问值的推荐方法,因为`_source`必须在每次使用时被加载和解析。使用`_source`是非常慢的。 -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Search_After.md: -------------------------------------------------------------------------------- 1 | # Search After 2 | 3 | 结果的分页可以通过使用`from`和`size`来完成,但是当达到深度分页时成本变得禁止。`index.max_result_window`默认为`10,000`是一种保护,搜索请求占用堆内存和时间与`from + size`成比例。 建议使用 [Scroll](./Scroll.md) api 进行高效的深层滚动,但滚动上下文是昂贵的,不建议将其用于实时用户请求。`search_after`参数通过提供活动光标来规避此问题。 这个想法是使用前一页的结果来帮助检索下一页。 4 | 5 | 假设检索第一页的查询如下所示: 6 | 7 | ```bash 8 | GET twitter/tweet/_search 9 | { 10 | "size": 10, 11 | "query": { 12 | "match" : { 13 | "title" : "elasticsearch" 14 | } 15 | }, 16 | "sort": [ 17 | {"date": "asc"}, 18 | {"_uid": "desc"} 19 | ] 20 | } 21 | ``` 22 | 23 | > 注意: 24 | > 25 | > 每个文档具有一个唯一值的字段应用作排序规范的仲裁。 否则,具有相同排序值的文档的排序顺序将是未定义的。 建议的方法是使用字段`_uid`,它确保每个文档包含一个唯一值。 26 | 27 | 上述请求的结果包括每个文档的排序值数组。 这些排序值可以与 `search_after`参数结合使用,以便在结果列表中的任何文档之后“返回”结果。 例如,我们可以使用最后一个文档的排序值,并将其传递给`search_after`以检索下一页结果: 28 | 29 | ```bash 30 | GET twitter/tweet/_search 31 | { 32 | "size": 10, 33 | "query": { 34 | "match" : { 35 | "title" : "elasticsearch" 36 | } 37 | }, 38 | "search_after": [1463538857, "tweet#654323"], 39 | "sort": [ 40 | {"date": "asc"}, 41 | {"_uid": "desc"} 42 | ] 43 | } 44 | ``` 45 | 46 | > 注意: 47 | > 48 | > 当使用`search_after`时,参数`from`必须设置为`0`(或 `-1` )。 49 | 50 | `search_after`不是一种自由地跳到随机页面的解决方案,而是一种并行地滚动许多查询的解决方案。 它非常类似于`scroll` API,但不同的是,`search_after`参数是无状态的,它总是解决对搜索器的最新版本。 因此,排序顺序可能会在步行期间更改,具体取决于您的索引的更新和删除。 -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Search_Type.md: -------------------------------------------------------------------------------- 1 | # Search Type 2 | 3 | 在执行分布式搜索时可以执行不同的执行路径。分布式搜索操作需要分散到所有相关的分片,然后收集所有的结果。当使用分散/集合类型执行时,有几种方法可以做到这一点,特别是使用搜索引擎。 4 | 5 | 执行分布式搜索时的一个问题是从每个分片检索多少结果。例如,如果我们有`10`个分片,则第一个分片可以保存从`0`到`10`的最相关的结果,其他分片结果排在其下。为此,当执行请求时,我们需要从所有分片中获取`0`到`10`的结果,对它们进行排序,然后如果我们想要确保正确的结果,则返回结果。 6 | 7 | 与搜索引擎相关的另一个问题是每个分片独立存在的事实。当在特定分片上执行查询时,它不考虑来自其他分片的项频率和其他搜索引擎信息。如果我们想要支持准确的排名,我们需要首先收集所有分片中的术语频率,以计算全局术语频率,然后使用这些全局频率对每个分片执行查询。 8 | 9 | 此外,由于需要对结果进行排序,取回大的文档集,或者甚至滚动它,同时保持正确的排序行为可能是非常昂贵的操作。对于大型结果集滚动,最好按`_doc`进行排序,如果返回文档的顺序不重要。 10 | 11 | Elasticsearch非常灵活,允许控制在**每个搜索请求**的基础上执行的搜索类型。可以通过在查询字符串中设置`search_type`参数来配置类型。类型是: 12 | 13 | ## Query Then Fetch 14 | 15 | 参数值:**query_then_fetch**。 16 | 17 | 请求分两个阶段处理。 在第一阶段,查询被转发到所有涉及的分片。 每个分片执行搜索并生成对该分片本地的结果的排序列表。 每个分片只向协调节点返回足够的信息,以允许其合并并将分片级结果重新排序为全局排序的最大长度大小的结果集。 18 | 19 | 在第二阶段期间,协调节点仅从相关分片请求文档内容(以及高亮显示的片段,如果有的话)。 20 | 21 | > 注意: 22 | > 23 | > 如果您未在请求中指定`search_type`,那么这是默认设置。 24 | 25 | ## Dfs, Query Then Fetch 26 | 27 | 参数值:**dfs_query_then_fetch** 28 | 29 | 与 “Query Then Fetch” 相同,除了初始分散阶段,其计算分布项频率用于更准确的计分。 30 | -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Source_filtering.md: -------------------------------------------------------------------------------- 1 | # Source filtering 2 | 3 | 允许控制`_source`字段如何在每次的采样中返回。 4 | 5 | 默认操作返回`_source`字段的内容,除非您已使用`stored_fields`参数或禁用`_source`字段。 6 | 7 | 您可以使用`_source`参数关闭对`_source`的提取: 8 | 9 | 要禁用`_source`的提取可以设置其为`false`: 10 | 11 | ```js 12 | GET /_search 13 | { 14 | "_source": false, 15 | "query" : { 16 | "term" : { "user" : "kimchy" } 17 | } 18 | } 19 | ``` 20 | 21 | `_source`还接受一个或多个通配符模式来控制`_source`的哪些部分应该返回: 22 | 23 | 例如: 24 | 25 | ```js 26 | GET /_search 27 | { 28 | "_source": "obj.*", 29 | "query" : { 30 | "term" : { "user" : "kimchy" } 31 | } 32 | } 33 | ``` 34 | 35 | 或 36 | 37 | ```js 38 | GET /_search 39 | { 40 | "_source": [ "obj1.*", "obj2.*" ], 41 | "query" : { 42 | "term" : { "user" : "kimchy" } 43 | } 44 | } 45 | ``` 46 | 47 | 最后,为了完全控制,您可以指定包含和排除模式: 48 | 49 | ```js 50 | GET /_search 51 | { 52 | "_source": { 53 | "includes": [ "obj1.*", "obj2.*" ], 54 | "excludes": [ "*.description" ] 55 | }, 56 | "query" : { 57 | "term" : { "user" : "kimchy" } 58 | } 59 | } 60 | ``` -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/Version.md: -------------------------------------------------------------------------------- 1 | # Version 2 | 3 | 返回每个命中文档的版本信息。 4 | 5 | ```bash 6 | GET /_search 7 | { 8 | "version": true, 9 | "query" : { 10 | "term" : { "user" : "kimchy" } 11 | } 12 | } 13 | ``` -------------------------------------------------------------------------------- /Search_APIs/Request_Body_Search/min_score.md: -------------------------------------------------------------------------------- 1 | # min_score 2 | 3 | 排除`_score`小于`min_score`中指定的最小值的文档: 4 | 5 | ```bash 6 | GET /_search 7 | { 8 | "min_score": 0.5, 9 | "query" : { 10 | "term" : { "user" : "kimchy" } 11 | } 12 | } 13 | ``` 14 | 15 | 注意,大多数时候,这没有什么意义,但提供了高级用例。 16 | 17 | -------------------------------------------------------------------------------- /Search_APIs/Search.md: -------------------------------------------------------------------------------- 1 | # Search(搜索) 2 | 3 | 搜索API允许您执行搜索查询并获取与查询匹配的文档。查询可以使用简单的[查询字符串参数](./URI_Search.md)或[使用请求体](./Request_Body_Search.md)。 4 | 5 | ## 多索引、多类型 6 | 7 | 所有搜索API可以跨索引中的多种类型应用,并跨多个索引并支持[多索引语法](../API_Conventions/Multiple_Indices.md)。例如,我们可以搜索`twitter`索引中所有类型的所有文档: 8 | 9 | ```js 10 | GET /twitter/_search?q=user:kimchy 11 | ``` 12 | 13 | 我们也可以指定类型进行搜索: 14 | 15 | ```js 16 | GET /twitter/tweet,user/_search?q=user:kimchy 17 | ``` 18 | 19 | 我们还可以通过多个索引搜索带有某个标签的所有推文(例如,每个用户都有自己的索引): 20 | 21 | ```js 22 | GET /kimchy,elasticsearch/tweet/_search?q=tag:wow 23 | ``` 24 | 25 | 或者我们可以使用`_all`占位符搜索所有可用索引的所有推文: 26 | 27 | ```js 28 | GET /_all/tweet/_search?q=tag:wow 29 | ``` 30 | 31 | 甚至搜索所有索引库和所有类型: 32 | 33 | ```js 34 | GET /_search?q=tag:wow 35 | ``` 36 | 37 | 默认情况下,`elasticsearch`不会根据请求匹配的分片数拒绝任何搜索请求。虽然elasticsearcg将优化协调节点上的搜索执行,但是大量的分片可以显着影响CPU和内存。组织数据通常是一个更好的主意,这样一来,更小的分片就越少。如果您想要配置软限制,则可以更新`action.search.shard_count.limit`的群集设置,以便拒绝匹配太多分片的搜索请求。 38 | -------------------------------------------------------------------------------- /Search_APIs/Search_Shards_API.md: -------------------------------------------------------------------------------- 1 | # Search Shards API 2 | 3 | search shards api返回将执行搜索请求的索引和分片。这可以提供有用的反馈,用于解决问题或使用`routing`和`shard perference`进行规划优化。当使用`aliase`过滤时,过滤器作为索引部分的一部分返回,在5.1.0中添加。 4 | 5 | `index`和`type`参数可以是单个值,也可以逗号分隔。 6 | 7 | `type`参数在~~5.1.0~~废弃。 8 | 9 | ## 用法 10 | 11 | 完整示例: 12 | 13 | ```bash 14 | GET /twitter/_search_shards 15 | ``` 16 | 产生如下结果: 17 | 18 | ```bash 19 | { 20 | "nodes": ..., 21 | "shards": [ 22 | [ 23 | { 24 | "index": "twitter", 25 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 26 | "primary": true, 27 | "shard": 0, 28 | "state": "STARTED", 29 | "allocation_id": {"id":"0TvkCyF7TAmM1wHP4a42-A"}, 30 | "relocating_node": null 31 | } 32 | ], 33 | [ 34 | { 35 | "index": "twitter", 36 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 37 | "primary": true, 38 | "shard": 1, 39 | "state": "STARTED", 40 | "allocation_id": {"id":"fMju3hd1QHWmWrIgFnI4Ww"}, 41 | "relocating_node": null 42 | } 43 | ], 44 | [ 45 | { 46 | "index": "twitter", 47 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 48 | "primary": true, 49 | "shard": 2, 50 | "state": "STARTED", 51 | "allocation_id": {"id":"Nwl0wbMBTHCWjEEbGYGapg"}, 52 | "relocating_node": null 53 | } 54 | ], 55 | [ 56 | { 57 | "index": "twitter", 58 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 59 | "primary": true, 60 | "shard": 3, 61 | "state": "STARTED", 62 | "allocation_id": {"id":"bU_KLGJISbW0RejwnwDPKw"}, 63 | "relocating_node": null 64 | } 65 | ], 66 | [ 67 | { 68 | "index": "twitter", 69 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 70 | "primary": true, 71 | "shard": 4, 72 | "state": "STARTED", 73 | "allocation_id": {"id":"DMs7_giNSwmdqVukF7UydA"}, 74 | "relocating_node": null 75 | } 76 | ] 77 | ] 78 | } 79 | ``` 80 | 81 | 指定相同的请求,这次用一个`routing`值: 82 | 83 | ```bash 84 | GET /twitter/_search_shards?routing=foo,baz 85 | ``` 86 | 87 | 这将获得以下结果: 88 | 89 | ```bash 90 | { 91 | "nodes": ..., 92 | "shards": [ 93 | [ 94 | { 95 | "index": "twitter", 96 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 97 | "primary": true, 98 | "shard": 0, 99 | "state": "STARTED", 100 | "allocation_id": {"id":"0TvkCyF7TAmM1wHP4a42-A"}, 101 | "relocating_node": null 102 | } 103 | ], 104 | [ 105 | { 106 | "index": "twitter", 107 | "node": "JklnKbD7Tyqi9TP3_Q_tBg", 108 | "primary": true, 109 | "shard": 1, 110 | "state": "STARTED", 111 | "allocation_id": {"id":"fMju3hd1QHWmWrIgFnI4Ww"}, 112 | "relocating_node": null 113 | } 114 | ] 115 | ] 116 | } 117 | ``` 118 | 这次搜索只会针对两个分片执行,因为已经指定了路由值 119 | 120 | 121 | ## 所有参数 122 | 123 | 参数名 | 描述 124 | -------|----------- 125 | `routing` | 以逗号分隔的路由值列表考虑到当确定哪些碎片会反对执行的请求。 126 | `preference` | 控制要对其执行搜索请求的分片副本的`perference`。 默认情况下,操作在分片副本之间随机化。 有关所有可接受值的列表,请参阅[preference](./Request_Body_Search/Preference.md)文档。 127 | `local` | 一个布尔值,是否在本地读取集群状态以便确定在何处分配碎片,而不是使用Master节点的集群状态。 -------------------------------------------------------------------------------- /Search_APIs/Suggesters.md: -------------------------------------------------------------------------------- 1 | # Suggesters 2 | 3 | `suggest`特性通过使用`suggester`基于所提供的文本来建议相似的术语。部分`suggest`功能还在开发中。 4 | 5 | suggest请求部分是在查询的`_search`请求中定义的。 6 | 7 | > 注意: 8 | > 9 | > `_suggest`端点已被弃用,倾向于通过`_search`端点使用suggest。在5.0中,`_search`端点针对`suggest`的搜索请求进行过优化。 10 | 11 | ```bash 12 | POST twitter/_search 13 | { 14 | "query" : { 15 | "match": { 16 | "message": "tring out Elasticsearch" 17 | } 18 | }, 19 | "suggest" : { 20 | "my-suggestion" : { 21 | "text" : "trying out Elasticsearch", 22 | "term" : { 23 | "field" : "message" 24 | } 25 | } 26 | } 27 | } 28 | ``` 29 | 30 | 可以为每个请求指定几条建议。每个建议都以任意名称标识。在下面的例子中,需要两个建议。`my-suggest-1`与`my-suggest-2`都使用`term`建议器,但有不同的`text`。 31 | 32 | ```bash 33 | POST _search 34 | { 35 | "suggest": { 36 | "my-suggest-1" : { 37 | "text" : "tring out Elasticsearch", 38 | "term" : { 39 | "field" : "message" 40 | } 41 | }, 42 | "my-suggest-2" : { 43 | "text" : "kmichy", 44 | "term" : { 45 | "field" : "user" 46 | } 47 | } 48 | } 49 | } 50 | ``` 51 | 52 | 下面的 suggest 响应示例包括对于`my-suggest-1`和 `my-suggestion-2`的 suggest 响应。 每个suggest 部分包含条目(entries)。 每个条目实际上是来自 suggest 文本的 token ,并且包含 suggest 文本中的 suggest 条目文本,原始的条目开始于 suggest 偏移(offset)和长度,并且如果找到任意数目的选项。 53 | 54 | ```js 55 | { 56 | "_shards": ... 57 | "my-suggest-1": [ { 58 | "text": "tring", 59 | "offset": 0, 60 | "length": 5, 61 | "options": [ {"text": "trying", "score": 0.8, "freq": 1 } ] 62 | }, { 63 | "text": "out", 64 | "offset": 6, 65 | "length": 3, 66 | "options": [] 67 | }, { 68 | "text": "elasticsearch", 69 | "offset": 10, 70 | "length": 13, 71 | "options": [] 72 | } ], 73 | "my-suggest-2": ... 74 | } 75 | ``` 76 | 77 | 每个选项数组(option array)包含一个选项对象,其中包括 suggest 文本,其文档频率和分数与 suggest 输入文本相比较。 分数的意义取决于使用的suggester。 术语 suggester 的分数是基于编辑(edit)距离。 78 | 79 | ## 全局 suggest 文本 80 | 81 | 为了避免重复 suggest 文本,可以定义全局文本。 在下面的示例中,suggest 文本是全局定义的,并适用于`my-suggest-1`和`my-suggest-2`建议。 82 | 83 | ```bash 84 | POST _suggest 85 | { 86 | "text" : "tring out Elasticsearch", 87 | "my-suggest-1" : { 88 | "term" : { 89 | "field" : "message" 90 | } 91 | }, 92 | "my-suggest-2" : { 93 | "term" : { 94 | "field" : "user" 95 | } 96 | } 97 | } 98 | ``` 99 | 100 | 在上述示例中,suggest 文本也可以被指定为 suggest 特定选项。 在 suggestion 级别上指定的 suggest 文本覆盖全局级别上的 suggest 文本。 101 | 102 | -------------------------------------------------------------------------------- /Search_APIs/Suggesters/Term_suggester.md: -------------------------------------------------------------------------------- 1 | # Term suggester(词条建议器) 2 | 3 | > 注意 4 | > 5 | > 为了理解 suggestions 的形式,请先阅读[suggesters](../Suggesters.md)。 6 | 7 | `term`建议器根据编辑距离来进行词条建议。 8 | 9 | ## 常见的 suggest 选项 10 | 11 | Options | Description 12 | ---------|------------------ 13 | `text` | suggest 文本,suggest 文本是必须选项,需要被设定为全局或者对每个 suggestion。 14 | `field` | 从中获取候选 suggestions 的字段(field)。 这是必需的选项,需要设置为全局或按 suggestion 设置。 15 | `analyzer` | 分词器用来分析suggest文本,默认为 suggest 字段的分词器。 16 | `size` | 每个 suggest 文本标记(token)返回的最大更正值。 17 | `sort` | 定义每个 suggest 文本术语中 suggestions 该如何排序。 两个可能的值:
`score`:先按照分数排序,然后按文档频率排序,然后是术语本身。
`frequency`:按文档频率排序,然后依次选择相似性分数和术语本身。 18 | `suggest_mode` | suggest_mode 控制什么 suggestions 被包括或控制什么 suggest 文本术语,什么 suggestions 应该被 suggested。 可以指定三个可能的值:
`missing`: 只提供不在索引中的 suggest 文字字词的 suggestion 。 这是默认值。
`popular`:只 suggest 出现在更多文档中的 suggestions,而不是原始 suggest 文本术语。
`always`: 根据 suggest 文字中的字词 suggest 任何相符的 suggestions。 19 | 20 | ## 其它term suggest选项 21 | 22 | Options | Description 23 | ---------|------------------ 24 | `lowercase_terms` | 在文本分析后的 小写 suggest 文本术语。 25 | `max_edits` | 可以认为是候选 suggestions 的最大编辑距离。 只能是介于`1`和`2`之间的值。任何其他值都会导致抛出错误的请求错误。 默认为`2`。 26 | `prefix_length` | 为了成为候选 suggestions 所必须匹配的最小前缀字符的数量。 默认值为`1`.增加此数字可提高拼写检查性能。 通常拼写错误不会出现在术语的开头。 (旧名称 “prefix_len” 已弃用) 27 | `min_word_length` | suggest 文本术语必须包含的最小长度。 默认值为`4`.(旧名称 “min_word_len” 已弃用) 28 | `shard_size` | 设置要从每个单独的分片检索的 suggestions 的最大数量。 在减少阶段期间,仅基于`size`选项返回前N个 suggestions。 默认为`size`选项。 将其设置为大于该`size`的值可以是有用的,以便以性能为代价获得更准确的拼写校正的文档频率。 由于术语在分片之间分割的事实,拼写校正的分片级文档频率可能不精确。 ` 29 | `max_inspections` | 用于乘以 shards_size 以便在碎片级别上检查更多候选拼写校正的因子。 可以以性能为代价提高精度。 默认为`5`。 30 | `min_doc_freq` | suggestion 应该出现的文档数量的最小阈值。这可以指定为绝对数字或文档数量的相对百分比。 这可以通过仅 suggesting 高频项来提高质量。 默认值为`0f` ,未启用。 如果指定的值大于`1`,则该数字不能为小数。 分片级文档频率用于此选项。 31 | `max_term_freq` | suggest 文本标记可以存在的文档数量中的最大阈值,以便包括。 可以是表示文档频率的相对百分比数字(例如0.4)或绝对数字。 如果指定的值大于1,则不能指定小数。 默认为 0.01f。 这可以用于排除高频术语的拼写检查。 高频项通常拼写正确,这也提高了拼写检查的性能。 分片级文档频率用于此选项。 32 | `string_distance` | 使用哪个字符串距离实现来比较类似的 suggested 术语。 可以指定五个可能的值: internal - 基于 `damerau_levenshtein`的默认值,但是高度优化用于比较索引中的项的字符串距离。`damerau_levenshtein`—— 基于 Damerau-Levenshtein 算法的字符串距离算法。 `levenstein` —— 基于 Levenstein 编码距离算法的字符串距离算法。 `jarowinkler` —— 基于 Jaro-Winkler 算法的字符串距离算法。 `ngram` —— 基于字符`n-gram`的字符串距离算法。 33 | -------------------------------------------------------------------------------- /Search_APIs/URI_Search.md: -------------------------------------------------------------------------------- 1 | # URI Search 2 | 3 | 可以通过提供请求参数来纯粹使用 URI 来执行搜索请求。 在使用此模式执行搜索时,并非所有搜索选项都会公开,但它可以方便快速的进行“curl 测试”。 4 | 5 | 这里给出一个例子: 6 | 7 | ```js 8 | GET twitter/tweet/_search?q=user:kimchy 9 | ``` 10 | 11 | 并给出一个示例响应: 12 | 13 | ```js 14 | { 15 | "timed_out": false, 16 | "took": 62, 17 | "_shards":{ 18 | "total" : 1, 19 | "successful" : 1, 20 | "failed" : 0 21 | }, 22 | "hits":{ 23 | "total" : 1, 24 | "max_score": 1.3862944, 25 | "hits" : [ 26 | { 27 | "_index" : "twitter", 28 | "_type" : "tweet", 29 | "_id" : "0", 30 | "_score": 1.3862944, 31 | "_source" : { 32 | "user" : "kimchy", 33 | "date" : "2009-11-15T14:12:12", 34 | "message" : "trying out Elasticsearch", 35 | "likes": 0 36 | } 37 | } 38 | ] 39 | } 40 | } 41 | ``` 42 | 43 | ## 参数 44 | 45 | URI 中允许使用的参数有: 46 | 47 | 参数名 | 描述 48 | -------------------|-------------------- 49 | `q` | 查询字符串(映射到`query_string`查询,有关更多详细信息,请参阅查询字符串查询) 50 | `df` | 在查询中未定义字段前缀时使用的默认字段。 51 | `analyzer` | 分析查询字符串时使用的分析器名称。 52 | `lowercase_expanded_terms` | 应将条款自动缩小或不缩小。默认为`true`。 53 | `analyze_wildcard` | 应该分析通配符和前缀查询还是不分析。默认为`false`。 54 | `default_operator` | 要使用的默认运算符,可以是`AND`或`OR`。默认为`OR`。 55 | `lenient` | 如果设置为`true`将导致基于格式的失败(例如向数字字段提供文本)被忽略。默认为`false`。 56 | `explain` | 对于每个命中,包含对如何计算命中的计分的解释。 57 | `_source` |设置为`false`以禁用检索`_source`字段。您还可以使用 `_source_include`&`_source_exclude`检索文档的一部分(有关更多详细信息,请参阅请求主体文档)。 58 | `stored_fields` | 为每次命中返回文档的选择性存储字段,逗号分隔。未指定任何值将不会返回任何字段。 59 | `sort` | 排序执行。可以是`fieldName`或`fieldName:asc`/`fieldName:desc`的形式。 `fieldName`可以是文档中的实际字段,也可以是指示基于分数排序的特殊`_score`名称。可以有几个`sort`参数(顺序很重要)。 60 | `track_scores` | 排序时,设置为`true`以便仍然跟踪分数并将其作为每次匹配的一部分返回。 61 | `timeout` | 搜索超时,将搜索请求限制为在指定的时间值内执行并且保留与到期时累积的点击数。默认为无超时。 62 | `terminate_after` | 要为每个分片收集的文档的最大数量,到达时,查询执行将提前终止。如果设置,响应将有布尔型字段`terminated_early`以指示查询执行是否实际已提前终止。默认为无`terminate_after`。 63 | `from` | 从命中的索引开始返回。默认值为`0`。 64 | `size` | 要返回的匹配数。默认值为`10`。 65 | `search_type` | 要执行的搜索操作的类型。可以是`dfs_query_then_fetch`或`query_then_fetch`。默认为`query_then_fetch`。有关可以执行的不同类型搜索的更多详细信息,请参阅搜索类型。 -------------------------------------------------------------------------------- /Setup_Elasticsearch.md: -------------------------------------------------------------------------------- 1 | # Elasticsearch设置 2 | 3 | 本节包括有关如何设置Elasticsearch并使其运行的信息,包括: 4 | 5 | * 下载 6 | * 安装 7 | * 启动 8 | * 配置 9 | 10 | ## 支持的平台 11 | 12 | 官方支持的操作系统和JVM的矩阵可以查看这里: [Support Matrix(支持矩阵)](https://www.elastic.co/support/matrix)。 Elasticsearch在列出的平台上测试,但它也可能能够在其他平台上工作。 13 | 14 | ## Java(JVM) 版本 15 | 16 | Elasticsearch是使用Java构建的,并且至少需要[Java 8](http://www.oracle.com/technetwork/java/javase/downloads/index.html)才能运行。 只支持Oracle的Java和OpenJDK。 在所有Elasticsearch节点和客户端上应使用相同的JVM版本。 17 | 18 | 我们建议安装Java版本**1.8.0_73*或更高版本**。 如果使用已知的错误版本的Java,Elasticsearch将拒绝启动。 19 | 20 | Elasticsearch使用的Java版本可以通过设置`JAVA_HOME`环境变量进行配置。 21 | 22 | > 注意 23 | > 24 | > Elasticsearch自带的JVM默认配置是运行在64位服务器上的, 如果你想以客户端模式运行在32位机器上,你需要在[jvm.options](./Setup_Elasticsearch/Important_System_Configuration/Configuring_system_settings.md#jvm-options)配置文件中删除`-server`参数,以及无论是在32位客户机还是服务器上运行Elasticsearch,你都需要重新配置线程堆大小在`-Xss1m`与`-Xss320k`之间 25 | -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks.md: -------------------------------------------------------------------------------- 1 | # 启动前检查 2 | 3 | ## 启动检查 4 | 5 | 总的来说,我们有很多用户遇到一些意想不到的问题都是因为他们没有配置[重要设置](./Important_Elasticsearch_configuration.md)。在Elasticsearch以前的版本中,其中的一些配置错误被记录为警告信息。可以理解的是,用户有时会忽略这些日志消息。为了确保这些设置受到应有的重视,Elasticsearch在启动之前会做一些检查。 6 | 7 | 这些启动查会检测Elasticsearch和系统的各种设置,并比较与那些为值是否是Elasticsearch的操作安全值。如果Elasticsearch处于开发模式,任何启动检失败被记录为Elasticsearch警告日志。如果Elasticsearch是在生产模式下,任何启动检查失败会导致Elasticsearch拒绝启动。 8 | 9 | 有一些引导检查总是执行是为了防止Elasticsearch使用不兼容的设置。这些检查是单独记录。 10 | 11 | ## 开发模式vs生产模式 12 | 13 | 默认情况下,Elasticsearch为[HTTP模块](../Modules/HTTP.md)和[传输(内部)模块](../Modules/Transport.md)的绑定在`localhost`上通信。这是对于下载与试玩Elasticsearch、以及日常开发都是非常好的,但是对生产系统无用的。为了形成一个群集,Elasticsearch实例各节点之前传输通信必须绑定外部的网络接口。因此,我们判定一个Elasticsearch实例是否已开发模式运行就是看它是否绑定了外部网络接口(默认是开发模式运行)。注意,HTTP和传输模块可以通过`http.host`与`transport.host`独立配置;这可以用来配置一个HTTP外部可访问的单一实例来避免触发生产模式的一些检查。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Client_JVM_check.md: -------------------------------------------------------------------------------- 1 | # JVM Client模式检查 2 | 3 | OpenJDK提供了两种JVM的运行模式:`client JVM`模式与`server JVM`模式。他们提供了不同的编译器来从java字节码来执行机器码。client JVM调优了启动时间以及内存消耗,server jvm提供了更高的性能。二者的性能差异非常大。JVM Client模式检查是确保Elasticsearch不以client模式来运行。要想通过此检查,你需要以server的方式来启动Elasticsearch。在现有的系统与操作系统中,server模式是默认的。此外,Elasticsearch也默认强制配置了server模式。 4 | 5 | -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/File_descriptor_check.md: -------------------------------------------------------------------------------- 1 | # 文件描述符检查 2 | 3 | 文件描述符是Unix架构用来跟踪打开的“files”的。在Unix中,[一些都是文件](https://en.wikipedia.org/wiki/Everything_is_a_file)。例如,“files”可以是物理文件,也可以是虚拟文件(如:`/proc/loadavg`),甚至是一个网络套接字。Elasticserarch需要非常多的文件描述符(譬如:每一个由多个段和文件组成的分片、加上其他节点的连接等等)。此启动检查将在OSX和Linux系统上执行。要通过此项检查,你需要配置[文件描述符](../Important_System_Configuration/File_Descriptors.md)。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/G1GC_check.md: -------------------------------------------------------------------------------- 1 | # G1GC检查 2 | 3 | 早期JDK 8 HotSpotJVM版本在开启G1GC回收器时会存在已知的问题会导致索引腐化,JDK 8u40之前的版本都会受影响。G1GC检查探测是否是之前的HotSpot JVM版本。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Heap_size_check.md: -------------------------------------------------------------------------------- 1 | # 堆大小检查 2 | 3 | 如果JVM采用不同的初始与最大的堆(heap)值启动,它容易在系统使用时堆大小发生变化时造成JVM暂停。为了避免这些调整的停顿,最好设置JVM的初始堆大小等于最大堆大小。此外,如果[bootstrap.memory_lock](../Important_Elasticsearch_configuration.md#bootstrap.memory_lock)被启用,在启动时JVM将锁定堆的初始大小。如果初始堆大小不等于最大堆大小,后面将不会调整大小因为所有JVM堆都被在内存中锁定。要通过堆大小检查,则必须配置[堆大小](../Important_System_Configuration/Set_JVM_heap_size_via_jvm.options.md)。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Maximum_map_count_check.md: -------------------------------------------------------------------------------- 1 | # 最大map数检查 2 | 3 | 接着[上一点](./Maximum_size_virtual_memory_check.md),为了让`mmap`生效,Elasticsearch还需要有创建需要内存映射区的能力。最大map数检查是确保内核允许创建至少262144个内存映射区,只在Linux执行检查。要想通过此检查,你需要通过`sysctl`设置`vm.max_map_count`最少为`262144`。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Maximum_number_of_threads_check.md: -------------------------------------------------------------------------------- 1 | # 最大线程数检查 2 | 3 | Elasticsearch执行请求时将请求分解成多个阶段,在不同阶段使用不同的线程池执行。elasticsearch有执行不同任务的[线程池执行器](../../Modules/Thread_pool.md)。因此Elasticsearch需要具备创建很多线程的能力。最大线程数检查是确保Elasticsearch进程有创建足够多线程来正常使用的权利。此检查只针对Linux系统。如果你是在Linux上运行,要通过此检查你必须让Elasticsearch进程至少有创建`2048`个线程的能力。可以通过`/etc/security/limits.conf`使用`nproc`来配置(注意:你可能还需要增加`root`用户的相关限制)。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Maximum_size_virtual_memory_check.md: -------------------------------------------------------------------------------- 1 | # 最大虚拟内存检查 2 | 3 | Elasticsearch与Lucene使用`mmap`来映射部分索引到Elasticsearch的地址空间。这是的某些索引数据的JVM对能被快速访问。这是有效的,因为Elasticsearch拥有无限制的地址空间。最大虚拟内存检查确保Elasticsearch进程拥有足够多的地址空间,且只在Linux中执行。要想通过最大虚拟内存检查,你必须配置你的操作系统允许Elasticsearch进程有无限制地址空间的能力。这可以通过`/etc/security/limits.conf`文件的`unlimited`来配置(注意:你可能还需要增加`root`用户的相关限制)。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Memory_lock_check.md: -------------------------------------------------------------------------------- 1 | # 内存锁定检查 2 | 3 | 当JVM的主垃圾回收器检查推的每一页时,如果其中任何一页被交换到磁盘那它不得不重新交换回内存,这会导致大量的磁盘抖动,Elasticsearch宁愿做大量的服务请求。有一些方法可以配置系统不允许交换,一种方法是锁定JVM堆内存,Unix通过`mlockall`,Windows通过虚拟锁。这可以通过Elasticsearch的[bootstrap.memory_lock](../Important_Elasticsearch_configuration.md#bootstrap-memory_lock)来配置。但是,Elasticsearch不能锁定堆(譬如elasticsearch用户没有`memlock`权限)的这种场景能够被检查通过。内存锁定检查校验是否开启了`bootstrap.memory_lock`设置,这样JVM将成功锁定的内存。要通过此项检查,你需要配置[mlockall](../Important_System_Configuration/Disable_swapping.md#mlockall)。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/OnError_and_OnOutOfMemoryError_checks.md: -------------------------------------------------------------------------------- 1 | # OnError与OnOutOfMemoryError检查 2 | 3 | 启用JVM的`OnError`与`OnOutOfMemoryError`选项可以在JVM运行任意指令发生致命错误(OnError)或内存泄露(OnOutOfMemoryError)时记录重要信息。但是默认情况下Elasticsearch的系统调用过滤检查是开启的且它们会阻止`froking`动作。因此,使用`OnError`与`OnOutOfMemoryError`和系统调用过滤是不兼容的。在开启了系统调用检查时,`OnError`与`OnOutOfMemoryError`的检查会阻止Elasticsearch启动。这个检查总是会执行。要想通过此检查,你可以升级java的8u92版本并使用JVM参数`ExitOnOutOfMemoryError`参数来替代它们。但是它并没有全量的包含`OnError`与`OnOutOfMemoryError`的功能,随意的`froking`在启用seccomp之后将不再支持。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/System_call_filter_check.md: -------------------------------------------------------------------------------- 1 | # 系统调用过滤检查 2 | 3 | Elasticsearch安装各自各样的系统调用过滤依赖于操作系统(如:Linux上的seccomp)。如果成功安装与启用了系统调用过滤,将能够防御一些对Elasticsearch调用的攻击行为。要想通过此检查,你必须根据日志来修复任何阻止系统调用过滤的系统错误,或者通过配置`bootstrap.system_call_filter`为`false`来禁用系统调用过滤然后**你自己做风控**。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Bootstrap_Checks/Use_serial_collector_check.md: -------------------------------------------------------------------------------- 1 | # 串行收集使用检查 2 | 3 | 针对不同的工作负载OpenJDK有不同的垃圾收集方式。串行收集器是最适合单一逻辑的CPU机器或非常小的堆,这不适合Elasticsearch运行。使用串行收集器对于Elasticsearch的性能可能是毁灭性的。串行收集器检查确保Elasticsearch不采用串行收集器运行。要通过此检查,你必须不能用串行收集器来运行Elasticsearch(无论你是否使用JVM默认值还是明确指定`-XX:+UseSerialGC`)。注意,默认JVM配置通过Elasticsearch的配置将使用CMS回收器。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration.md: -------------------------------------------------------------------------------- 1 | # 重要的系统配置 2 | 3 | 理想情况下,Elasticsearch应该单独在一个服务器上运行,并使用所有可用的资源。为了做到这一点,您需要配置您的操作系统允许用户运行Elasticsearch比默认允许访问更多的资源。 4 | 5 | 以下设置必须在生产使用时配置: 6 | 7 | * [设置JVM堆大小](./Important_System_Configuration/Set_JVM_heap_size_via_jvm.options.md) 8 | * [禁用交换](./Important_System_Configuration/Disable_swapping.md) 9 | * [增加文件描述符](./Important_System_Configuration/File_Descriptors.md) 10 | * [确保足够的虚拟内存](./Important_System_Configuration/Virtual_memory.md) 11 | * [确保足够的线程](./Important_System_Configuration/Number_of_threads.md) 12 | 13 | 14 | 15 | ## 开发模式vs生产模式 16 | 17 | 默认情况下,Elasticsearch假设你在开发环境中工作。任何没有设置正确的配置,都会以警告的方式记录在日志文件中,但是你能启动与运行Elasticsearch节点。 18 | 19 | 一旦你后面配置了网络设置如`network.host`,Elasticsearch将会切换到生产模式并将警告升级为异常。这些异常将会阻止Elasticsearch节点的启动。这是一个非常重要的安全措施,以确保你不会因为错误的配置丢失数据。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration/Configuring_system_settings.md: -------------------------------------------------------------------------------- 1 | # 系统设置 2 | 3 | 在哪里配置系统设置取决于你使用哪个包安装Elasticsearch,以及您正在使用的操作系统。 4 | 5 | 当你使用`.zip`或`.tar.gz`的安装包是,系统设置可以按如下方式配置: 6 | 7 | * 通过[ulimit](#ulimit)临时限制 8 | * 通过[/etc/security/limits.conf](#limits.conf)永久限制 9 | 10 | 当你使用RPM或Debian安装包时,更多的系统设置可以通过(系统配置文件](#sysconfig)。但是,使用systemd的系统设置系统限制需要在[systemd配置文件中设置](#systemd)。 11 | 12 | ## ulimit 13 | 14 | 在Linux系统上,可以使用`ulimit`临时改变资源限制。限制通常需要切换到root用户下进行设置。例如,设置打开文件的句柄数限制(ulimit -n)为`65536`,可以按如下做: 15 | 16 | ```bash 17 | sudo su #① 18 | ulimit -n 65536 #② 19 | su elasticsearch #③ 20 | ``` 21 | 22 | ① 切换到root 23 | ________________ 24 | ② 修改最大打开文件句柄数 25 | ________________ 26 | ③ 切换回启动Elasticsearch的`elasticsearch`用户 27 | 28 | 新的现在将被应用到当前会话。 29 | 30 | 你可以通过`ulimit -a`查询当前的所有限制参数。 31 | 32 | ## /etc/security/limits.conf 33 | 34 | 在Linux系统,可以通过制定的用户编辑`/etc/security/limits.conf`文件来持久化限制设置。若要设置`elasticsearch`用户打开文件句柄数最大值为`65536`,可以将如下行添加到`limit.conf`文件中: 35 | 36 | ```js 37 | elasticsearch - nofile 65536 38 | ``` 39 | 40 | 这种变化知会在用户下次打开一个新的会话时生效。 41 | 42 | > 注意 43 | > 44 | > **Ubuntu与`limits.conf`** 45 | > Ubuntu在`init.d`启动时忽略了`limits.conf`文件。要开启`limits.conf`文件,需要编辑`/etc/pam.d/su`,删除下面行的注释: 46 | > 47 | > ```bash 48 | > # session required pam_limits.so 49 | > ``` 50 | 51 | ## Sysconfig file 52 | 53 | 在使用RPM或Debian系统时,系统设置与环境变量可以通过系统配置文件制定,他们位于: 54 | 55 | RPM /etc/sysconfig/elasticsearch 56 | ____________________________________ 57 | Debian /etc/default/elasticsearch 58 | 59 | 然而,对于使用systemd的系统,系统限制通过[systemd](#systemd)指定。 60 | 61 | ## systemd file 62 | 63 | 当使用RPM或Debian软件包是使用systemd的系统,系统限制必须通过`systemd`指定。 64 | 65 | systemd服务文件(`/usr/lib/systemd/system/elasticsearch.service`)包含的限制将被用作默认值。 66 | 67 | 如果需要覆盖它,需要添加一个叫`/etc/systemd/system/elasticsearch.service.d/elasticsearch.conf`的文件并在文件中指定任意的变化,就像: 68 | 69 | ```bash 70 | [Service] 71 | LimitMEMLOCK=infinity 72 | ``` 73 | 74 | ## jvm.options 75 | 76 | 设置Java虚拟机参数(包括系统属性和JVM参数)的首选方式是通过`jvm.options`文件配置。这个文件在`tar`和`zip`包方式安装时在`config/jvm.options`,在RPM或Debian方式安装时在`/etc/elasticsearch/jvm.options`。这个文件包含了一个用行风格的JVM参数列表,必须要用`-`开头。你可以添加自定义的JVM参数到这个文件或在你的控制系统版本中检查这些配置。 77 | 78 | 另一种方式是通过设置环境变量`ES_JAVA_OPTS`的方式来添加JAVA虚拟机参数,例如: 79 | 80 | ```bash 81 | export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir" 82 | ./bin/elasticsearch 83 | ``` 84 | 85 | 在使用RPM或Debian安装包时,`ES_JAVA_OPTS`可以通过[系统配置文件](#systemd)设置。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration/Disable_swapping.md: -------------------------------------------------------------------------------- 1 | # 禁用swapping 2 | 3 | 大多数操作系统尝试使用尽可能多的内存文件系统缓存和热切换出未使用的应用程序内存。这可能导致部分JVM堆被交换到磁盘上。 4 | 5 | 对于性能和节点的稳定性交换是非常糟糕的,应该不惜一切代价避免。它可能导致垃圾收集持续几**分钟**而不是毫秒,这可能导致节点响应缓慢,甚至脱离集群。 6 | 7 | 有三种方式禁用swapping: 8 | 9 | 10 | ## 开启bootstrap.memory_lock 11 | 12 | 第一步,在Linux与Unix系统中使用[mlockall](http://opengroup.org/onlinepubs/007908799/xsh/mlockall.html)或者在Windows系统中使用[VirtuallLock](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366895%28v=vs.85%29.aspx)来尝试在RAM中锁定进程的地址空间,来阻止Elasticsearch内存被交换出去。 13 | 14 | 如果这些设置完成,请在`config/elasticsearch.yml`中添加如下行: 15 | 16 | ```yaml 17 | bootstrap.memory_lock: true 18 | ``` 19 | 20 | > 警告 21 | > 22 | > 如果试图分配的内存大于可用内存,`mlockall`可能导致JVM或shell会话退出! 23 | 24 | Elasticsearch启动之后,你可以通过下面请求输出结果中的`mlockall`对应的值来验证是否设置成功: 25 | 26 | ```js 27 | GET _nodes?filter_path=**.mlockall 28 | ``` 29 | 30 | 如果你看到`mlockall`为`false`,那么意味着`mlockall`请求失败了。你也可以在日志文件中通过`Unable to lock JVM Memory`关键词获取更多的信息。 31 | 32 | 最可能的原因,在Linux与Unix系统上,运行Elasticsearch的用户没有权限锁定内存。这可以通过如下获得: 33 | 34 | ### `.zip`与`.tar.gz`安装包 35 | 36 |   启动Elasticsearch之前通过root设置[ulimit -l ulimited](./Configuring_system_settings.md#ulimit),或者在[/etc/security/limits.conf](./Configuring_system_settings.md#limits.conf)中设置 **memlock** 为 **unlimited** 。 37 | 38 | ### RPM与Debian安装包 39 | 40 |   在[系统配置](./Configuring_system_settings.md#sysconfig)中设置 **MAX_LOCKED_MEMORY** 为 **ulimited** (或者参见如下 **systemd** 的设置方式)。 41 | 42 | ### 系统使用`systemd` 43 | 44 |   在[systemd配置](./Configuring_system_settings.md#systemd)中设置 **LimitMEMLOCK** 为 **infinity**。 45 | 46 | `mlockall`失败的另一个可能的原因是临时目录(通常是`/tmp`)挂载使用`noexec`选项。这可以通过设置`ES_JAVA_OPTS`的环境变量来指定一个新的临时目录: 47 | 48 | ```bash 49 | export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir" 50 | ./bin/elasticsearch 51 | ``` 52 | 53 | 或者在`jvm.options`配置文件中设置。 54 | 55 | 56 | ## 禁用所有的swap文件 57 | 58 | 第二种方式就是彻底禁用swap。通常Elasticsearch是运行在一个独立的机器上,且内存使用是通过JVM来控制的。这可能不需要开启swap。 59 | 60 | 在Linux操作系统,你可以通过`sudo swapoff -a`来临时禁用swap。要永久的停用swap,可以通过编辑`/etc/fstab`文件,注释文件中所有包含swap单词的行。 61 | 62 | 在Windows操作系统,你可以通过`系统设置->高级->性能->高级->虚拟内存`来禁用分页文件。 63 | 64 | ## 配置`swappiness` 65 | 66 | 另一种方式在Linux系统上可用,确保设置`vm.swappiness`为1。这减少了内核交换的倾向和正常情况下不应该导致,同时仍然允许在紧急条件下整个系统交换。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration/File_Descriptors.md: -------------------------------------------------------------------------------- 1 | # 文件描述符 2 | 3 | > 注意 4 | > 5 | > 此设置仅需要在Linux或maxOSd的环境中配置,Windows系统可以忽略。在Windows系统中,JVM[API](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858\(v=vs.85\).aspx)限制仅受限于可用的资源。 6 | 7 | Elasticsearch使用大量的文件描述符或文件句柄。文件描述符超限在运行时灾难性的,很可能导致数据丢失。请确保调大运行Elasticsearchd的用户允许打开文件描述符数量到65536或更大。 8 | 9 | 如果使用的是`.zip`与`.tar.gz`安装包,在启动elasticsearch前通过`root`用户设置[ulimit -n 65536](./Configuring_system_settings.md#ulimit),或者是设置[/etc/security/limits.conf](./Configuring_system_settings.md#limits.conf)的`nofile`为`65536`。 10 | 11 | RPM和Debian软件包已经默认文件描述符的最大数量为65536,不需要进一步配置。 12 | 13 | 你可以通过各节点的[Nodes Stats](../../Cluster_APIs/Cluster_Stats.md)API来检查`max_file_descriptions`: 14 | 15 | ```js 16 | GET _nodes/stats/process?filter_path=**.max_file_descriptors 17 | ``` -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration/Number_of_threads.md: -------------------------------------------------------------------------------- 1 | # 线程数 2 | 3 | Elasticsearch不同类的操作使用不同的线程池。在必要的时候创建新的线程非常重要,确保elasticsearch用户可以创建的线程数至少为2048。 4 | 5 | 这些可以通过root用户在启动前使用[ulimit -u 2048](./Configuring_system_settings.md#ulimit)来设置,或者是在[/etc/security/limits.conf](./Configuring_system_settings.md#limits.conf)中设置`nproc`。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration/Set_JVM_heap_size_via_jvm.options.md: -------------------------------------------------------------------------------- 1 | # 在jvm.options中设置JVM堆大小 2 | 3 | 默认情况下,Elasticsearch告诉JVM使用堆的最小值和最大值的2GB。切换到生产时,保证Elasticsearch有足够的可用堆是非常重要的。 4 | 5 | Elasticsearch将通过[jvm.options](./Configuring_system_settings.md#jvm-options)中的Xms(堆的最小值)与Xmx(堆的最大值)设置来分配堆的大小。 6 | 7 | 这个值依赖于服务器上可用的RAM数量,好的设置规则如下: 8 | 9 | * 堆的最小值(Xms)与堆的最大值(Xmx)设置成相同的。 10 | * Elasticsearch的可用堆越大,它能在内存中缓存的数据越多。但是需要注意堆越大在垃圾回收时造成的暂停会越长。 11 | * 设置Xmx不要大于物理内存的50%。用来确保有足够多的物理内存预留给操作系统缓存。 12 | * 不要设置Xmx超过JVM用来压缩对象指针的cutoff(compressed oops);精确的cutoff可能不同,但接近于32GB。你可以通过在日志中查找一条类似于下面的这条信息来确定这个cutoff限制。 13 | ```bash 14 | heap size [1.9gb], compressed ordinary object pointers [true] 15 | ``` 16 | * 最好尽量保持低于zero-based compressed oop的阈值;精确的cutoff可能不同,但大多数系统26GB是安全的,但是在某些系统可能多达30GB。你可以通过JVM的`XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode`参数来验证限制,并通过类似如下的行来确定: 17 | ```bash 18 | heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops 19 | ``` 20 | 如果是开启了zero-based compressed oop则 21 | ```bash 22 | heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000 23 | ``` 24 | 25 | 下面演示了如何通过`jvm.options`文件来配置堆大小: 26 | 27 | ```yaml 28 | -Xms2g #① 29 | -Xmx2g #② 30 | ``` 31 | 32 | ① 设置堆的最小值为2g。 33 | ___________________ 34 | ② 设置堆的最大值为2g。 35 | 36 | 他们同样也能通过环境变量来设置。先需要在`jvm.options`文件中注释掉 `Xms`与`Xmx`设置,然后通过`ES_JAVA_OPTS`来设置: 37 | 38 | ```bash 39 | ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch #① 40 | ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch #② 41 | ``` 42 | 43 | ① 设置堆的最小值与最大值为2GB。 44 | ___________________ 45 | ② 设置堆的最小值与最大值为4000MB。 46 | 47 | > 注意 48 | > 49 | > [Windows服务](../Installing_Elasticsearch/Install_Elasticsearch_on_Windows.md#windows-service)配置堆的大小与上面方式不同。初始值可以在安装Windows服务时配置,但是安装完之后也可以调整。查阅[Windows服务文档](../Installing_Elasticsearch/Install_Elasticsearch_on_Windows.md#windows-service)来获取更多信息。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Important_System_Configuration/Virtual_memory.md: -------------------------------------------------------------------------------- 1 | # 虚拟内存 2 | 3 | Elasticsearch默认采用[hybrid mmapfs / niofs](../../Index_Modules/Store.md#default_fs)目录来保存索引。默认的操作系统mmap数限制看起来太小,这可能会导致内存溢出的异常。 4 | 5 | 在Linux系统,你可以使用`root`用户通过如下命令来增加限制数: 6 | 7 | ```bash 8 | sysctl -w vm.max_map_count=262144 9 | ``` 10 | 11 | 若要永久的生效,可以更新`/etc/sysctl.conf`中的`vm.max_map_count`。重启系统后可以通过运行`sysctl vm.max_map_count`来进行验证。 12 | 13 | RPM与Debian安装包会自动设置此配置,不需要进一步配置。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Installing_Elasticsearch.md: -------------------------------------------------------------------------------- 1 | # 安装Elasticsearch 2 | 3 | Elasticsearch提供了以下安装包格式: 4 | 5 | 格式 | 说明 6 | -----------|------------- 7 | zip/tar.gz |`zip`和`tar.gz`的安装包适合在任何系统上安装,是开始使用Elasticsearch的最简单的选择。
[.zip或.tar.gz文件的安装方式](./Installing_Elasticsearch/Install_Elasticsearch_with_.zip_or_.tar.gz.md) 或 [Windows安装方式](./Installing_Elasticsearch/Install_Elasticsearch_on_Windows.md) 8 | deb |`deb`安装包适用于Debian,Ubuntu和其他基于Debian的系统。 Debian软件包可以从Elasticsearch网站或我们的Debian仓库下载。
[Debian软件包安装方式](./Installing_Elasticsearch/Install_Elasticsearch_with_Debian_Package.md) 9 | rpm |`rpm`包适合在Red Hat,Centos,SLES,OpenSuSE和其他基于RPM的系统上安装。 RPM可以从Elasticsearch网站或从我们的RPM仓库下载。[rpm软件包安装方式](./Installing_Elasticsearch/Install_Elasticsearch_with_RPM.md)。 10 | docker | 使用镜像可将Elasticsearch在Docker容器运行。它预装了[X-Pack](https://www.elastic.co/guide/en/x-pack/5.3/index.html),可以从`Elastic Docker Registry`下载。 [Docker安装方式](./Installing_Elasticsearch/Install_Elasticsearch_with_Docker.md) 11 | 12 | ## 配置管理工具 13 | 14 | 我们还提供以下配置管理工具来帮助大型部署: 15 | 16 | 名称 |项目地址 17 | -----------|------------- 18 | Puppet |[puppet-elasticsearch](https://github.com/elastic/puppet-elasticsearch) 19 | Chef |[cookbook-elasticsearch](https://github.com/elastic/cookbook-elasticsearch) 20 | Ansible |[ansible-elasticsearch](https://github.com/elastic/ansible-elasticsearch) 21 | -------------------------------------------------------------------------------- /Setup_Elasticsearch/Secure_Settings.md: -------------------------------------------------------------------------------- 1 | # 安全配置 2 | 3 | 有一些设置是敏感的,通过文件系统的权限来保护是不足够的。基于这种场景,elasticsearch提供了一个keystore,可以通过密码保护。`elasticsearch-keystore`就是用来管理与设置keystore的工具。 4 | 5 | > 注意 6 | > 7 | > 所有的指令都必须使用运行elasticsearch的用户来执行。 8 | 9 | ## 创建keystore 10 | 11 | 使用`create`指令来创建`elasticsearch.keystore`: 12 | 13 | ```bash 14 | bin/elasticsearch-keystore create 15 | ``` 16 | 17 | `elasticsearch.keystore`文件将被创建在` elasticsearch.yml`文件的旁边。 18 | 19 | ## 列出keystore的配置 20 | 21 | 使用`list`指令来列出`elasticsearch.keystore`的设置: 22 | 23 | ```bash 24 | bin/elasticsearch-keystore list 25 | ``` 26 | 27 | ## 添加一个String设置 28 | 29 | 一些敏感的字符串,像云平台插件的一个认真参数,可以通过`add`指令来添加: 30 | 31 | ```bash 32 | bin/elasticsearch-keystore add the.setting.name.to.set 33 | ``` 34 | 35 | 工具将提示这个值得设置。如果要通过控制台展示,使用`--stdin`参数: 36 | 37 | ```bash 38 | cat /file/containing/setting/value | bin/elasticsearch-keystore add --stdin the.setting.name.to.set 39 | ``` 40 | 41 | ## 删除设置 42 | 43 | 使用`remove`指令来从`keystore`中删除配置: 44 | 45 | ```bash 46 | bin/elasticsearch-keystore remove the.setting.name.to.remove 47 | ``` -------------------------------------------------------------------------------- /Setup_Elasticsearch/Stopping_Elasticsearch.md: -------------------------------------------------------------------------------- 1 | # Elasticsearch停机 2 | 3 | 有序的关闭Elasticsearch来确保Elasticsearch有机会清理和关闭未完成得资源。譬如:节点关闭后有序的从集群中移除、同步传输日志到磁盘以及一些其他的相关清理活动。你可以确保Elasticsearch有序的停机来帮助Elasticsearch正确的停止。 4 | 5 | 如果Elasticsearch作为一个服务运行,你可以通过你安装的服务管理功能来停止Elasticsearch。 6 | 7 | 如果你是在控制台直接运行的Elasticsearch,你可以通过发送`conrtol + C`来停止,或者是在POSIX系统发送`SIGTERM`信号给Elasticsearch进程。你可以通过各种各样的工具获取PID来发送信号(如:ps或jps): 8 | 9 | ```bash 10 | $ jps | grep Elasticsearch 11 | 14542 Elasticsearch 12 | ``` 13 | 14 | 通过启动日志: 15 | 16 | ```js 17 | [2016-07-07 12:26:18,908][INFO ][node ] [I8hydUG] version[5.0.0-alpha4], pid[15399], build[3f5b994/2016-06-27T16:23:46.861Z], OS[Mac OS X/10.11.5/x86_64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_92/25.92-b14] 18 | ``` 19 | 20 | 或者通过启动时指定的PID文件获取: 21 | 22 | ```bash 23 | $ ./bin/elasticsearch -p /tmp/elasticsearch-pid -d 24 | $ cat /tmp/elasticsearch-pid && echo 25 | 15516 26 | $ kill -SIGTERM 15516 27 | ``` 28 | 29 | ## 致命错误停机 30 | 31 | 在Elasticsearch虚拟机运行期间,可能出现某些致命错误把虚拟机标记为可疑状态。这些致命错误可能包含虚拟机内部错误、严重的I/O错误。 32 | 33 | 当Elasticsearch检测到虚拟机遇到这样一个致命错误时,Elasticsearch将尝试记录错误,然后将停止虚拟机。当Elasticsearch发起一个这样的关闭时,它没有经过上述的有序关闭。Elasticsearch将会返回一个特定的状态码来标识这个错误。 34 | 35 | 错误原因 | 错误码 36 | -----------------|--------- 37 | JVM内部错误 | 128 38 | 内存溢出 | 127 39 | 堆溢出 | 126 40 | 未知虚拟机错误 | 125 41 | 严重I/O错误 | 124 42 | 未知致命错误 | 1 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Upgrading_Elasticsearch.md: -------------------------------------------------------------------------------- 1 | # Elasticsearch升级 2 | 3 | > 重要 4 | > 5 | > 开始升级Elasticsearch之前: 6 | > * 查询[破坏性的改变](./Breaking_changes.md)文档 7 | > * 升级前使用[Elasticsearch迁移插件](https://github.com/elastic/elasticsearch-migration/)来检测潜在的问题。 8 | > * 在升级生产环境之前先在开发环境做升级测试 9 | > * 总是在升级前[备份你的数据](../Modules/Snapshot_And_Restore.md),你**不能回滚**到早期版本,除非你有备份数据。 10 | > * 如果你使用自己定义插件,请检查它可用的兼容版本。 11 | 12 | Elasticsearch通过可以通过滚动升级来不中断服。本节详细介绍如何执行滚动升级和集群重启升级。 13 | 14 | 确定是否支持滚动升级你的版本,请查阅此表: 15 | 16 | 从哪个版本升级 | 升级到哪个版本 | 支持升级的类型 17 | ------------|--------------|----------------- 18 | 1.x |5.x | [索引重建升级](./Upgrading_Elasticsearch/Reindex_to_upgrade.md) 19 | 2.x |2.y | [滚动升级](./Upgrading_Elasticsearch/Rolling_upgrades.md)(当y>x时) 20 | 2.x |5.x | [全集群重启升级](./Upgrading_Elasticsearch/Full_cluster_restart_upgrade.md) 21 | 5.0.0 pre GA|5.x | [全集群重启升级](./Upgrading_Elasticsearch/Full_cluster_restart_upgrade.md) 22 | 5.x |5.y | [滚动升级](./Upgrading_Elasticsearch/Rolling_upgrades.md)(当y>x时) 23 | 24 | > 重要 25 | > 26 | > 在1.x或之前创建的索引 27 | > 28 | > Elasticsearch只能阅读**上一个major版本**创建的索引。例如:5.x只能阅读2.x创建的索引,不能阅读1.x创建的索引。 29 | > 30 | > 这个条件也被应用在[快照与还原](../Modules/Snapshot_And_Restore.md)。如果一个索引库最初是由1.x的版本创建的他将不能还原到5.x的版本,即使快照是由2.x的集群创建。 31 | > 32 | > Elasticsearch 5.x的节点在存在太老的索引库时将无法启动。 33 | > 34 | > 参见[索引重建升级](./Upgrading_Elasticsearch/Reindex_to_upgrade.md)来获取更多如何升级老索引库的相关信息。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Upgrading_Elasticsearch/Full_cluster_restart_upgrade.md: -------------------------------------------------------------------------------- 1 | # 全集群重启升级 2 | 3 | Elasticsearch在夸大版本(major)升级时需要重启整个集群。滚动升级不支持夸大版本。查阅[此表](../Upgrading_Elasticsearch.md#upgrade-table)来验证哪些是必须要全集群重启升级的。 4 | 5 | 执行全集群重启升级的过程如下: 6 | 7 | 1. **禁用分片分配** 8 | 9 | 当你关闭一个节点时,分配进程在等待一分钟之后开始将此节点上的分片复制到其它节点中,会造成很多浪费的I/O。这可以在节点关闭前通过禁用分片分配来避免: 10 | 11 | ```js 12 | PUT _cluster/settings 13 | { 14 | "transient": { 15 | "cluster.routing.allocation.enable": "none" 16 | } 17 | } 18 | ``` 19 | 20 | 1. **执行同步冲刷** 21 | 22 | 你可以愉快地继续索引在升级。但是,如果你临时地关闭一些非不要的索引库以及执行一次[同步冲刷](../../Indices_APIs/Flush/Synced_Flush.md)请求可以帮助你快速恢复分片: 23 | 24 | ```js 25 | POST _flush/synced 26 | ``` 27 | 28 | 同步冲刷请求是一个”尽力而为“的操作。它可能会因为一些正在进行的索引操作而失败,但是如果有必要你可以反复的执行它,这是安全的。 29 | 30 | 1. **停止与升级所有节点** 31 | 32 | 在集群的所有节点上停掉Elasticsearch服务。在每一个节点上执行同样的步骤来完成[节点升级](./Rolling_upgrades.md#upgrade-node)。 33 | 34 | 1. **升级所有的插件** 35 | 36 | 升级Elasticsearch节点时必须升级插件。使用`elasticsearch-plugin`脚本安装你所有需要插件的正确版本。 37 | 38 | 1. **启动集群** 39 | 40 | 如果你有专门的master节点(在节点配置中设置`node.master`为`true`且`node.data`为`false`),先启动他们是一个好的主意。在处理数据节点之前等待它们形成一个集群并选举出一个主节点。你可以通过查看日志来检查进度。 41 | 42 | 一旦对方发现了[最小的主节点数](../../Modules/Discovery/Zen_Discovery.md#master-election),它们将在集群中选举主节点。从这时开始,就可以使用[_cat/health](../../cat_APIs/cat_health.md)与[_cat/nodes](../../cat_APIs/cat_nodes.md)API来监控节点加入集群: 43 | 44 | ```js 45 | GET _cat/health 46 | GET _cat/nodes 47 | ``` 48 | 49 | 使用这些API来检查所有节点已经成功地加入到集群。 50 | 51 | 1. **等待状态`yellow`** 52 | 53 | 一旦节点加入了集群,他将开始恢复本地存储的分片数据。刚开始[_cat/health](../../cat_APIs/cat_health.md)会返回`status`为`red`,这表示还有主分片未分配完成。 54 | 55 | 一旦本地存储的分片恢复完成,`status`将会变成`yellow`,这表示所有主分片已恢复,但是副本分片没有分配。这是我们预料到的,因为分片分配被我们之前禁用了。 56 | 57 | 1. **重新打开分片分配** 58 | 59 | 延迟副本分片的分配,直到所有节点都加入了集群且完成了本地分片数据的分配。从这时开始,所有节点都已在集群中,重新打开分片分配是安全的: 60 | 61 | ```js 62 | PUT _cluster/settings 63 | { 64 | "transient": { 65 | "cluster.routing.allocation.enable": "all" 66 | } 67 | } 68 | ``` 69 | 70 | 集群将开始分片副本到所有的数据节点。这是你可以安全的开始新增索引与执行搜索操作,但是如果你在分片恢复之前延迟这些操作将会使得恢复过程变得更快。 71 | 72 | 你可以使用[_cat/health](../../cat_APIs/cat_health.md)与[_cat/revocery](../../cat_APIs/cat_recovery.md)API来监控进度: 73 | 74 | ```js 75 | GET _cat/health 76 | GET _cat/recovery 77 | ``` 78 | 79 | 一旦`_cat/health`输出的`status`列变成`green`,所有主分片与副本分片都成功分配完成。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Upgrading_Elasticsearch/Reindex_to_upgrade.md: -------------------------------------------------------------------------------- 1 | # 索引重建升级 2 | 3 | Elasticsearch只能使用前一个主版本(major)创建的索引数据。例如,Elasticsearch 5.x能使用Elasticsearch 2.x创建的索引,但不能使用Elasticsearch 1.x或更早版本创建的索引。 4 | 5 | > 注意 6 | > 7 | > Elasticsearch 5.x在存在老索引数据时会启动失败。 8 | 9 | 如果您正在运行一个包含了2.x版本创建的索引库的Elasticsearch 2.x集群,在升级到5.x之前你需要删除这些索引库或重新索引它们。参见[Reindex in place](#reindex)。 10 | 11 | 如果你运行的是Elasticsearch 1.x的集群,你有两个选择: 12 | 13 | * 一种是升级到2.4.x,重建老的索引库,然后再升级到5.x。参见[Reindex in place](#reindex)。 14 | * 另一种是创建一个新的5.x集群,并使用`reindex-from-remote`来从1.x集群导入索引库。参见[使用`reindex-from-remote`升级](#reindex-from-remote)。 15 | 16 | > # 基于时间的索引库与保留周期 17 | > 18 | > 对于很多基于时间的索引库场景,不不太需要关心从1.x升级到5.x。通常基于时间的数据随着时间的推移数据都会变得没那么有趣,一旦超出保留周期老的索引库就可以删除掉。 19 | > 20 | > 用户可以在这个位置一直使用2.x直到所有1.x的索引库被全部删掉,然后再升级到5.x。 21 | 22 | ## Reindex in place 23 | 24 | 最简单的重建老索引(1.x)的方法是使用[Elasticsearch迁移插件](https://github.com/elastic/elasticsearch-migration/tree/2.x),你需要先升级Elasticsearch到2.3.x或2.4.x。 25 | 26 | 迁移插件提供的重建索引工具工作流程如下: 27 | 28 | * 创建一个新的索引库,名称采用老的索引库名字拼接新的Elasticsearch版本号(例如:`my_index-2.4.1`),从新的索引库拷贝所有的映射与设置,新索引库禁用了冲刷、并且副本数被设置为`0`。 29 | * 设置老索引库为只读,确保没有数据写入到老索引库。 30 | * 重新索引老索引库的所有文档到新索引库。 31 | * 根据老索引库的值重新设置新索引库`refresh_interval`与`number_of_replicas`的值,然后等待索引库状态变为`green`。 32 | * 把老索引库的所有别名添加到新索引库。 33 | * 删除老索引库。 34 | * 用老索引库的名称作为别名添加到新索引库。例如:添加别名`my_index`指向索引库`my_index-2.4.1`。 35 | 36 | 过程结束后,你将会有一个新的2.x的索引库,并且它能被5.x的Elasticsearch集群使用。 37 | 38 | 39 | ## 使用`reindex-from-remote`升级 40 | 41 | 如果你有一个1.x的集群想升级到5.x,但是又不想先迁移到2.x,你可以使用[reindex-from-remote](../../Document_APIS/Reindex_API.md#reindex-from-remote)。 42 | 43 | > 重要 44 | > 45 | > Elasticsearch包含向后兼容的代码,允许索引库从上一个major版本升级到当前的major版本。在从1.x直接升级到5.x时,你必须自己解决所有向后兼容的问题。 46 | 47 | 你需要在已有的1.x集群旁边安装一个5.x的集群,5.x的集群要能够访问1.x集群的REST API。 48 | 49 | 对于每一个你想传输到5.x集群的1.x索引库,你需要: 50 | 51 | * 在5.x创建一个新的索引,并使用适当的映射与设置。设置`refresh_interval`为`-1`,以及`number_of_replicas`为`0`来快速完成重建索引。 52 | * 使用[reindex-from-remote](../../Document_APIS/Reindex_API.md#reindex-from-remote)拉去1.x的索引库到5.x的新索引库。 53 | * 如果你使用后台任务来重建索引(设置`wait_for_completion`为`false`),重建索引的请求将会返回一个`task_id`,可以通过[task API](../..//Cluster_APIs/Task_Management_API.md)来监控重建索引的进度:`GET _tasks/TASK_ID`。 54 | * 一旦重建索引完成,设置`refresh_interval`与`number_of_replicas`为希望的值(默认为`30s`和`1`). 55 | * 一旦新索引库完成了副本,你可以删除老的索引库。 56 | 57 | 5.x的集群刚开始可以是一个小的集群,你可以根据你从1.x集群迁移到5.x集群的规模来逐步的增加节点。 -------------------------------------------------------------------------------- /Setup_Elasticsearch/Upgrading_Elasticsearch/Rolling_upgrades.md: -------------------------------------------------------------------------------- 1 | # 滚动升级 2 | 3 | 滚动升级允许用户每次升级Elasticsearch集群中的一个节点,终端用户感受不到任何停机。升级期间在同一个集群中会允许多个不同版本的Elasticsearch,正常生产期间不允许这样允许,因为新版本的分片副本将不会存放到老版本上。 4 | 5 | 查阅[此表](../Upgrading_Elasticsearch.md#upgrade-table)来验证你的Elasticsearch版本是否支持滚动升级。 6 | 7 | 执行滚动升级: 8 | 9 | 1. **禁用分片分配** 10 | 11 | 当你关闭一个节点时,分配进程在等待一分钟之后开始将此节点上的分片复制到其它节点中,会造成很多浪费的I/O。这可以在节点关闭前通过禁用分片分配来避免: 12 | 13 | ```js 14 | PUT _cluster/settings 15 | { 16 | "transient": { 17 | "cluster.routing.allocation.enable": "none" 18 | } 19 | } 20 | ``` 21 | 22 | 1. **停止不必要的索引库和执行一个同步冲刷(可选)** 23 | 24 | 你可以愉快地继续索引在升级。但是,如果你临时地关闭一些非不要的索引库以及执行一次[同步冲刷](../../Indices_APIs/Flush/Synced_Flush.md)请求可以帮助你快速恢复分片: 25 | 26 | ```js 27 | POST _flush/synced 28 | ``` 29 | 30 | 同步冲刷请求是一个”尽力而为“的操作。它可能会因为一些正在进行的索引操作而失败,但是如果有必要你可以反复的执行它,这是安全的。 31 | 32 | 1. **停止与升级一个节点** 33 | 34 | 在开始升级前停掉集群中其中的一个节点。 35 | 36 | > 提示 37 | > 38 | > 在使用`zip`或`tar`安装包时,`config`、`data`、`logs`、`plugin`目录默认放置在Elasticsearch的主目录下。 39 | > 40 | > 一个好的主意是将他们放置在其它位置,这样就不可能会在升级Elasticsearch时删除它们。自定义的路径可以通过`path.conf`、`path.logs`、`path.data`来[配置](../Important_Elasticsearch_configuration.md#path),并且通过`ES_JVM_OPTIONS`来指定`jvm.options`文件的路径。 41 | > 42 | > [Debain](../Installing_Elasticsearch/Install_Elasticsearch_with_Debian_Package.md)与[RPM](../Installing_Elasticsearch/Install_Elasticsearch_with_RPM.md)安装包则会将这些目录放置在操作系统合适的地方。 43 | 44 | 如果升级采用[Debain](../Installing_Elasticsearch/Install_Elasticsearch_with_Debian_Package.md)与[RPM](../Installing_Elasticsearch/Install_Elasticsearch_with_RPM.md)安装包: 45 | 46 | * 使用`rpm`与`dpkg`安装包升级时,所有的文件都会被放置在合适的位置,且配置文件不会被覆盖。 47 | 48 | 如果升级采用`zip`或`tar`包: 49 | 50 | * 解压`zip`或`tar`包到一个新的目录,确保不会覆盖`config`或`data`目录。 51 | * 从老版本安装目录拷贝`config`目录到新的版本,或者使用`ES_JVM_OPTIONS`环境变量指定`jvm.options`文件与在命令行使用`-Epath.conf=`参数指向外部的目录。 52 | * 从老版本安装目录拷贝`data`目录到新的版本,或在`config/elasticsearch.yml`文件中配置`path.data`指向原来的数据文件目录。 53 | 54 | 1. **升级所有的插件** 55 | 56 | 升级Elasticsearch节点时必须升级插件。使用`elasticsearch-plugin`脚本安装你所有需要插件的正确版本。 57 | 58 | 1. **启动升级的节点** 59 | 60 | 现在开始启动升级的节点,并通过日志文件或如下命令来确认此节点能加入集群: 61 | 62 | ```js 63 | GET _cat/nodes 64 | ``` 65 | 66 | 1. **重新打开分片分配** 67 | 68 | ```js 69 | PUT _cluster/settings 70 | { 71 | "transient": { 72 | "cluster.routing.allocation.enable": "all" 73 | } 74 | } 75 | ``` 76 | 77 | 1. **等待节点的恢复** 78 | 79 | 在升级下一个节点前你需要等待集群完成分片的分配工作。你可以通过[_cat/health](../../cat_APIs/cat_health.md)来检查完成得进度: 80 | 81 | ```js 82 | GET _cat/health 83 | ``` 84 | 85 | 一直等待`status`这一列的值从`yellow`变为`green`。状态`green`表示所有的主分片与副本分片都已分配完成。 86 | 87 | > 重要 88 | > 89 | > 在滚动升级期间,主分片如果被分配到高版本的节点,那么副本将不会被分配到低版本的节点。这是因为新版本可能是不同的数据格式,低版本不能识别它。 90 | > 91 | > 如果不能将分片分配到其它高版本的节点(譬如:集群中只有一个高版本的节点),副本分片将被遗留成未分配的分片,且集群状态会变成`yellow`。 92 | > 93 | > 遇到这种场景时,在开始后续的工作之前你需要检查下未初始化或未迁移的分片(在`init`与`relo`列中)。 94 | > 95 | > 一旦另一个节点升级,副本分片将会被分配且集群的健康状态将会变成`green`。 96 | 97 | 分片没有被[同步冲刷](../../Indices_APIs/Flush/Synced_Flush.md)则可能还需要一些时间来恢复。单个分片的恢复状态可以通过[_cat/recovery](../../cat_APIs/cat_recovery.md)请求来监控: 98 | 99 | ```js 100 | GET _cat/recovery 101 | ``` 102 | 103 | 如果你停止新增索引,那在集群尽快完成恢复后重新开始新增索引是安全的做法。 104 | 105 | 1. **重复以上步骤** 106 | 107 | 当集群和节点恢复稳定后,所有剩余的节点重复以上步骤。 -------------------------------------------------------------------------------- /Testing.md: -------------------------------------------------------------------------------- 1 | # Testing 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework.md: -------------------------------------------------------------------------------- 1 | # Java Testing Framework 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework/Assertions.md: -------------------------------------------------------------------------------- 1 | # Assertions 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework/Randomized_testing.md: -------------------------------------------------------------------------------- 1 | # Randomized testing 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework/Using_the_elasticsearch_test_classes.md: -------------------------------------------------------------------------------- 1 | # Using the elasticsearch test classes 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework/integration_tests.md: -------------------------------------------------------------------------------- 1 | # integration tests 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework/unit_tests.md: -------------------------------------------------------------------------------- 1 | # unit tests 2 | 3 | -------------------------------------------------------------------------------- /Testing/Java_Testing_Framework/why_randomized_testing.md: -------------------------------------------------------------------------------- 1 | # why randomized testing? 2 | 3 | -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Elasticsearch中文指南", 3 | "description": "官方Elasticsearch Reference的中文翻译", 4 | "language": "zh", 5 | "plugins": [ 6 | "github", 7 | "editlink", 8 | "prism", 9 | "tbfed-pagefooter", 10 | "github-buttons" 11 | ], 12 | "pluginsConfig": { 13 | "sharing": { 14 | "weibo": true, 15 | "twitter": false, 16 | "facebook": false 17 | }, 18 | "github": { 19 | "url": "https://github.com/aqlu/elasticsearch-reference-cn" 20 | }, 21 | "editlink": { 22 | "base": "https://github.com/aqlu/elasticsearch-reference-cn/blob/master", 23 | "label": "编辑" 24 | }, 25 | "tbfed-pagefooter": { 26 | "copyright":"© ApacheCN Team", 27 | "modify_label": "该文件修订于:", 28 | "modify_format": "YYYY-MM-DD HH:mm:ss" 29 | }, 30 | "github-buttons": { 31 | "repo": "aqlu/elasticsearch-reference-cn", 32 | "types": [ 33 | "star" 34 | ], 35 | "size": "small" 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /cat_APIs.md: -------------------------------------------------------------------------------- 1 | # cat API 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_aliases.md: -------------------------------------------------------------------------------- 1 | # cat aliases 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_allocation.md: -------------------------------------------------------------------------------- 1 | # cat allocation 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_count.md: -------------------------------------------------------------------------------- 1 | # cat count 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_fielddata.md: -------------------------------------------------------------------------------- 1 | # cat fielddata 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_health.md: -------------------------------------------------------------------------------- 1 | # cat health 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_indices.md: -------------------------------------------------------------------------------- 1 | # cat indices 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_master.md: -------------------------------------------------------------------------------- 1 | # cat master 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_nodeattrs.md: -------------------------------------------------------------------------------- 1 | # cat nodeattrs 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_nodes.md: -------------------------------------------------------------------------------- 1 | # cat nodes 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_pending_tasks.md: -------------------------------------------------------------------------------- 1 | # cat pending tasks 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_plugins.md: -------------------------------------------------------------------------------- 1 | # cat plugins 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_recovery.md: -------------------------------------------------------------------------------- 1 | # cat recovery 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_repositories.md: -------------------------------------------------------------------------------- 1 | # cat repositories 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_segments.md: -------------------------------------------------------------------------------- 1 | # cat segments 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_shards.md: -------------------------------------------------------------------------------- 1 | # cat shards 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_snapshots.md: -------------------------------------------------------------------------------- 1 | # cat snapshots 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_templates.md: -------------------------------------------------------------------------------- 1 | # cat templates 2 | 3 | -------------------------------------------------------------------------------- /cat_APIs/cat_thread_pool.md: -------------------------------------------------------------------------------- 1 | # cat thread pool 2 | 3 | --------------------------------------------------------------------------------