├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── pom.xml └── src ├── main ├── java │ └── kz │ │ └── kaznu │ │ └── lucene │ │ ├── BasicSearchExamples.java │ │ ├── Teaser.java │ │ ├── constants │ │ └── Constants.java │ │ ├── index │ │ ├── MessageIndexer.java │ │ └── MessageToDocument.java │ │ ├── model │ │ └── Message.java │ │ └── utils │ │ └── Helper.java └── resources │ └── tutorial.json └── test ├── java └── kz │ └── kaznu │ └── lucene │ ├── BasicSearchExamplesTest.java │ ├── index │ └── MessageIndexerTest.java │ └── utils │ └── HelperTest.java └── resources └── tutorial.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # found here: 2 | # https://github.com/Danimoth/gitattributes/blob/master/Java.gitattributes 3 | # and extended a bit 4 | 5 | # Handle line endings automatically for files detected as text 6 | # and leave all files detected as binary untouched. 7 | * text=auto 8 | 9 | # 10 | # The above will handle all files NOT found below 11 | # 12 | 13 | # GENERIC patterns 14 | *.gitattributes text 15 | .gitignore text 16 | *.sh eol=lf 17 | *.bat eol=crlf 18 | 19 | # JAVA patterns 20 | # 21 | # These files are text and should be normalized (Convert crlf => lf), lf in the repository 22 | *.md text 23 | *.adoc text 24 | *.textile text 25 | *.mustache text 26 | *.csv text 27 | *.tab text 28 | *.tsv text 29 | *.css text 30 | *.df text 31 | *.htm text 32 | *.html text 33 | *.java text 34 | *.js text 35 | *.json text 36 | *.jsp text 37 | *.jspf text 38 | *.properties text 39 | *.sh text 40 | *.sql text 41 | *.svg text 42 | *.tld text 43 | *.txt text 44 | *.xml text 45 | *.sql text 46 | 47 | # These files are binary and should be left untouched 48 | # (binary is a macro for -text -diff) 49 | *.class binary 50 | *.dll binary 51 | *.ear binary 52 | *.gif binary 53 | *.ico binary 54 | *.jar binary 55 | *.jpg binary 56 | *.jpeg binary 57 | *.png binary 58 | *.so binary 59 | *.war binary 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io 2 | 3 | ### Linux ### 4 | *~ 5 | 6 | # KDE directory preferences 7 | .directory 8 | 9 | 10 | ### Intellij ### 11 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm 12 | 13 | *.iml 14 | 15 | ## Directory-based project format: 16 | .idea/ 17 | # if you remove the above rule, at least ignore the following: 18 | 19 | # User-specific stuff: 20 | # .idea/workspace.xml 21 | # .idea/tasks.xml 22 | # .idea/dictionaries 23 | 24 | # Sensitive or high-churn files: 25 | # .idea/dataSources.ids 26 | # .idea/dataSources.xml 27 | # .idea/sqlDataSources.xml 28 | # .idea/dynamic.xml 29 | # .idea/uiDesigner.xml 30 | 31 | # Gradle: 32 | # .idea/gradle.xml 33 | # .idea/libraries 34 | 35 | # Mongo Explorer plugin: 36 | # .idea/mongoSettings.xml 37 | 38 | ## File-based project format: 39 | *.ipr 40 | *.iws 41 | 42 | ## Plugin-specific files: 43 | 44 | # IntelliJ 45 | out/ 46 | 47 | # mpeltonen/sbt-idea plugin 48 | .idea_modules/ 49 | 50 | # JIRA plugin 51 | atlassian-ide-plugin.xml 52 | 53 | # Crashlytics plugin (for Android Studio and IntelliJ) 54 | com_crashlytics_export_strings.xml 55 | 56 | 57 | ### Java ### 58 | *.class 59 | 60 | # Mobile Tools for Java (J2ME) 61 | .mtj.tmp/ 62 | 63 | # Package Files # 64 | *.jar 65 | *.war 66 | *.ear 67 | 68 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 69 | hs_err_pid* 70 | 71 | target/ 72 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # lucene-tutorial 2 | This project is simple tutorial to Lucene queries. It provide basic examples of TermQuery and FuzzyQuery 3 | 4 | 5 | # Requirments 6 | 7 | 1. Java 1.8 8 | 2. Maven 3 9 | 3. Programming skills in Java 10 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | kz.kaznu.lucene 6 | tutorial 7 | 1.0-SNAPSHOT 8 | jar 9 | 10 | tutorial 11 | http://kaznu.kz/ 12 | 13 | 14 | UTF-8 15 | 5.4.1 16 | 17 | 18 | 19 | 20 | junit 21 | junit 22 | 4.12 23 | test 24 | 25 | 26 | 27 | 28 | org.apache.lucene 29 | lucene-core 30 | ${lucene.version} 31 | 32 | 33 | org.apache.lucene 34 | lucene-analyzers-common 35 | ${lucene.version} 36 | 37 | 38 | org.apache.lucene 39 | lucene-queryparser 40 | ${lucene.version} 41 | 42 | 43 | 44 | 45 | 46 | 47 | commons-io 48 | commons-io 49 | 2.4 50 | 51 | 52 | 53 | 54 | com.google.code.gson 55 | gson 56 | 2.5 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | org.apache.maven.plugins 65 | maven-compiler-plugin 66 | 67 | 1.8 68 | 1.8 69 | UTF-8 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/BasicSearchExamples.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene; 2 | 3 | import org.apache.lucene.analysis.ru.RussianAnalyzer; 4 | import org.apache.lucene.index.IndexReader; 5 | import org.apache.lucene.index.Term; 6 | import org.apache.lucene.queryparser.classic.ParseException; 7 | import org.apache.lucene.queryparser.classic.QueryParser; 8 | import org.apache.lucene.search.*; 9 | 10 | import java.io.IOException; 11 | 12 | public class BasicSearchExamples { 13 | public static final int DEFAULT_LIMIT = 10; 14 | private final IndexReader reader; 15 | 16 | public BasicSearchExamples(IndexReader reader) { 17 | this.reader = reader; 18 | } 19 | 20 | /** 21 | * Search using TermQuery 22 | * @param toSearch string to search 23 | * @param searchField field where to search. We have "body" and "title" fields 24 | * @param limit how many results to return 25 | * @throws IOException 26 | * @throws ParseException 27 | */ 28 | public void searchIndexWithTermQuery(final String toSearch, final String searchField, final int limit) throws IOException, ParseException { 29 | final IndexSearcher indexSearcher = new IndexSearcher(reader); 30 | 31 | final Term term = new Term(searchField, toSearch); 32 | final Query query = new TermQuery(term); 33 | final TopDocs search = indexSearcher.search(query, limit); 34 | final ScoreDoc[] hits = search.scoreDocs; 35 | showHits(hits); 36 | } 37 | 38 | /** 39 | * This is wrapper to searchIndexWithTermQuery 40 | * It executes searchIndexWithTermQuery using "body" field and limiting to 10 results 41 | * 42 | * @param toSearch string to search in the "body" field 43 | * @throws IOException 44 | * @throws ParseException 45 | */ 46 | public void searchIndexWithTermQueryByBody(final String toSearch) throws IOException, ParseException { 47 | searchIndexWithTermQuery(toSearch, "body", DEFAULT_LIMIT); 48 | } 49 | 50 | /** 51 | * Search in body using QueryParser 52 | * @param toSearch string to search 53 | * @param limit how many results to return 54 | * @throws IOException 55 | * @throws ParseException 56 | */ 57 | public void searchInBody(final String toSearch, final int limit) throws IOException, ParseException { 58 | final IndexSearcher indexSearcher = new IndexSearcher(reader); 59 | 60 | final QueryParser queryParser = new QueryParser("body", new RussianAnalyzer()); 61 | final Query query = queryParser.parse(toSearch); 62 | System.out.println("Type of query: " + query.getClass().getSimpleName()); 63 | 64 | final TopDocs search = indexSearcher.search(query, limit); 65 | final ScoreDoc[] hits = search.scoreDocs; 66 | showHits(hits); 67 | } 68 | 69 | /** 70 | * This is wrapper to searchInBody function 71 | * it executes searchInBody with default limiting to 10 results 72 | * 73 | * @param toSearch 74 | * @throws IOException 75 | * @throws ParseException 76 | */ 77 | public void searchInBody(final String toSearch) throws IOException, ParseException { 78 | searchInBody(toSearch, DEFAULT_LIMIT); 79 | } 80 | 81 | /** 82 | * Search using FuzzyQuery. 83 | * @param toSearch string to search 84 | * @param searchField field where to search. We have "body" and "title" fields 85 | * @param limit how many results to return 86 | * @throws IOException 87 | * @throws ParseException 88 | */ 89 | public void fuzzySearch(final String toSearch, final String searchField, final int limit) throws IOException, ParseException { 90 | final IndexSearcher indexSearcher = new IndexSearcher(reader); 91 | 92 | final Term term = new Term(searchField, toSearch); 93 | 94 | final int maxEdits = 2; // This is very important variable. It regulates fuzziness of the query 95 | final Query query = new FuzzyQuery(term, maxEdits); 96 | final TopDocs search = indexSearcher.search(query, limit); 97 | final ScoreDoc[] hits = search.scoreDocs; 98 | showHits(hits); 99 | } 100 | 101 | /** 102 | * Wrapper to fuzzySearch function. 103 | * It executed fuzzySearch with default limit and body field as target field 104 | * 105 | * @param toSearch string to search 106 | * @throws IOException 107 | * @throws ParseException 108 | */ 109 | public void fuzzySearch(final String toSearch) throws IOException, ParseException { 110 | fuzzySearch(toSearch, "body", DEFAULT_LIMIT); 111 | } 112 | 113 | private void showHits(final ScoreDoc[] hits) throws IOException { 114 | if (hits.length == 0) { 115 | System.out.println("\n\tНичего не найдено"); 116 | return; 117 | } 118 | System.out.println("\n\tРезультаты поиска:"); 119 | for (ScoreDoc hit : hits) { 120 | final String title = reader.document(hit.doc).get("title"); 121 | final String body = reader.document(hit.doc).get("body"); 122 | System.out.println("\n\tDocument Id = " + hit.doc + "\n\ttitle = " + title + "\n\tbody = " + body); 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/Teaser.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene; 2 | 3 | import kz.kaznu.lucene.index.MessageIndexer; 4 | import kz.kaznu.lucene.index.MessageToDocument; 5 | import org.apache.lucene.document.Document; 6 | import org.apache.lucene.queryparser.classic.ParseException; 7 | 8 | import java.io.IOException; 9 | import java.util.Scanner; 10 | 11 | public class Teaser { 12 | private static final String teaserTitle = "Привет Хабр!"; 13 | private static final String teaserBody = "Это демонстрация работы простейшего нечёткого поиска"; 14 | 15 | public static void main(String[] args) throws IOException, ParseException { 16 | final Document teaserDoc = MessageToDocument.createWith(teaserTitle, teaserBody); 17 | final MessageIndexer indexer = new MessageIndexer("/tmp/teaser_index"); 18 | indexer.index(true, teaserDoc); 19 | 20 | final BasicSearchExamples search = new BasicSearchExamples(indexer.readIndex()); 21 | 22 | final Scanner reader = new Scanner(System.in); // Reading from System.in 23 | System.out.print("Введите запрос:\t"); 24 | final String toSearch = reader.nextLine(); // Scans the next token 25 | 26 | search.fuzzySearch(toSearch); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/constants/Constants.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.constants; 2 | 3 | /** 4 | * Globally shared constants should be here 5 | */ 6 | public final class Constants { 7 | 8 | private Constants() { 9 | } 10 | 11 | public static String TMP_DIR = System.getProperty("java.io.tmpdir"); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/index/MessageIndexer.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.index; 2 | 3 | import org.apache.lucene.analysis.Analyzer; 4 | import org.apache.lucene.analysis.ru.RussianAnalyzer; 5 | import org.apache.lucene.document.Document; 6 | import org.apache.lucene.index.DirectoryReader; 7 | import org.apache.lucene.index.IndexReader; 8 | import org.apache.lucene.index.IndexWriter; 9 | import org.apache.lucene.index.IndexWriterConfig; 10 | import org.apache.lucene.store.Directory; 11 | import org.apache.lucene.store.FSDirectory; 12 | 13 | import java.io.IOException; 14 | import java.nio.file.Paths; 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | 18 | /** 19 | * Default Indexer that we will use in tutorial 20 | * Be default it will use RussianAnalyzer to analyze text 21 | */ 22 | public class MessageIndexer { 23 | private final String pathToIndexFolder; 24 | 25 | /** 26 | * Get instance of MessageIndex providing path where indexes will be stored 27 | * @param pathToIndexFolder File System path where indexes will be stored. For example /tmp/tutorial_indexes 28 | */ 29 | public MessageIndexer(final String pathToIndexFolder) { 30 | this.pathToIndexFolder = pathToIndexFolder; 31 | } 32 | 33 | /** 34 | * Indexing documents using provided Analyzer 35 | * 36 | * @param create to decide create new or append to previous one 37 | * @throws IOException 38 | */ 39 | public void index(final Boolean create, List documents, Analyzer analyzer) throws IOException { 40 | final Directory dir = FSDirectory.open(Paths.get(pathToIndexFolder)); 41 | final IndexWriterConfig iwc = new IndexWriterConfig(analyzer); 42 | if (create) { 43 | // Create a new index in the directory, removing any 44 | // previously indexed documents: 45 | iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE); 46 | } 47 | else { 48 | // Add new documents to an existing index: 49 | iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); 50 | } 51 | 52 | final IndexWriter w = new IndexWriter(dir, iwc); 53 | w.addDocuments(documents); 54 | w.close(); 55 | } 56 | 57 | /** 58 | * Indexing documents with RussianAnalyzer as analyzer 59 | * 60 | * @param create to decide create new or append to previous one 61 | * @throws IOException 62 | */ 63 | public void index(final Boolean create, List documents) throws IOException { 64 | final Analyzer analyzer = new RussianAnalyzer(); 65 | index(create, documents, analyzer); 66 | } 67 | 68 | /** 69 | * Indexing one document 70 | * 71 | * @param create to decide create new or append to previous one 72 | * @throws IOException 73 | */ 74 | public void index(final Boolean create, Document document) throws IOException { 75 | final List oneDocumentList = new ArrayList<>(); 76 | oneDocumentList.add(document); 77 | index(create, oneDocumentList); 78 | } 79 | 80 | /** 81 | * Get IndexReader by using pathToIndexFolder 82 | * 83 | * @return IndexReader or IOException if any 84 | * @throws IOException 85 | */ 86 | public IndexReader readIndex() throws IOException { 87 | final Directory dir = FSDirectory.open(Paths.get(pathToIndexFolder)); 88 | return DirectoryReader.open(dir); 89 | } 90 | 91 | public String getPathToIndexFolder() { 92 | return pathToIndexFolder; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/index/MessageToDocument.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.index; 2 | 3 | import org.apache.lucene.document.Document; 4 | import org.apache.lucene.document.Field; 5 | import org.apache.lucene.document.FieldType; 6 | import org.apache.lucene.index.IndexOptions; 7 | 8 | /** 9 | * We will use this class to convert messages to Lucene documents 10 | */ 11 | public class MessageToDocument { 12 | 13 | /** 14 | * Creates Lucene Document using two strings: body and title 15 | * 16 | * @return resulted document 17 | */ 18 | public static Document createWith(final String titleStr, final String bodyStr) { 19 | final Document document = new Document(); 20 | 21 | final FieldType textIndexedType = new FieldType(); 22 | textIndexedType.setStored(true); 23 | textIndexedType.setIndexOptions(IndexOptions.DOCS); 24 | textIndexedType.setTokenized(true); 25 | 26 | //index title 27 | Field title = new Field("title", titleStr, textIndexedType); 28 | //index body 29 | Field body = new Field("body", bodyStr, textIndexedType); 30 | 31 | document.add(title); 32 | document.add(body); 33 | return document; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/model/Message.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.model; 2 | 3 | import kz.kaznu.lucene.index.MessageToDocument; 4 | import org.apache.lucene.document.Document; 5 | 6 | public class Message { 7 | private String body; 8 | private String title; 9 | 10 | public Document convertToDocument() { 11 | return MessageToDocument.createWith(title, body); 12 | } 13 | 14 | public String getBody() { 15 | return body; 16 | } 17 | 18 | public void setBody(String body) { 19 | this.body = body; 20 | } 21 | 22 | public String getTitle() { 23 | return title; 24 | } 25 | 26 | public void setTitle(String title) { 27 | this.title = title; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/kz/kaznu/lucene/utils/Helper.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.utils; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | import com.google.gson.reflect.TypeToken; 6 | import com.google.gson.stream.JsonReader; 7 | import kz.kaznu.lucene.model.Message; 8 | import org.apache.lucene.document.Document; 9 | 10 | import java.io.File; 11 | import java.io.FileNotFoundException; 12 | import java.io.FileReader; 13 | import java.lang.reflect.Type; 14 | import java.util.ArrayList; 15 | import java.util.List; 16 | import java.util.stream.Collectors; 17 | 18 | public class Helper { 19 | private static final Gson gson = new GsonBuilder().create(); 20 | private static final Type listType = new TypeToken>() {}.getType(); 21 | 22 | /** 23 | * Read documents from the provided file. 24 | * Usual tutorial file is located in resources/tutorial.json 25 | * 26 | * @param file File that referred to JSON file 27 | * @return list of documents 28 | * @throws FileNotFoundException 29 | */ 30 | public static List readDocumentsFromFile(final File file) throws FileNotFoundException { 31 | final FileReader fileReader = new FileReader(file); 32 | final JsonReader reader = new JsonReader(fileReader); 33 | final List messages = gson.fromJson(reader, listType); 34 | final List documents = messages.stream() 35 | .map(Message::convertToDocument) 36 | .collect(Collectors.toList()); 37 | return documents; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/resources/tutorial.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "elasticSearchId": "", 4 | "newsPortalName": "Tengrinews.kz", 5 | "date": "Feb 7, 2016 7:55:20 PM", 6 | "title": "О ДТП с полицейским рассказали в ДВД Астаны", 7 | "URL": "http://tengrinews.kz/kazakhstan_news/o-dtp-s-politseyskim-rasskazali-v-dvd-astanyi-288607/", 8 | "tags": [ 9 | "Акмолинская область", 10 | " Астана", 11 | " ДТП", 12 | " Правоохранительные органы" 13 | ], 14 | "type": "NEWS", 15 | "notificationId": 1934112985, 16 | "body": "В ДВД Астаны рассказали подробности ДТП с участием полицейского, сообщает корреспондент Tengrinews.kz.\nПо информации пресс-службы, авария произошла 1 февраля около 10.00 утра по улице Акжол напротив АЗС \"КазМунайГаз\" в Астане. \"Водитель автомашины Mercedes, сотрудник полка дорожно-патрульной полиции ДВД Астаны, двигаясь по улице Акжол со стороны улицы Пушкина в сторону улицы Станция 40-я в условиях скользкого дорожного покрытия не справился с управлением, выехал на полосу встречного движения и допустил столкновение с автомашиной Kia Rio. В результате ДТП телесные повреждения получили оба водителя и два пассажира автомашин. В дальнейшем водитель Kia Rio был госпитализирован, остальные участники отказались от госпитализации\", - сообщили в ДВД Астаны. \nВ департаменте также отметили, что на момент совершения ДТП оба водителя были трезвы. \nСотрудник полка полиции и его напарник были в форменном обмундировании и возвращались домой после дежурства. По факту аварии проводится дознание.", 17 | "lang": "RU", 18 | "region": [ 19 | "ASTANA", 20 | "AKMOLA_REGION", 21 | "AKTOBE_REGION", 22 | "ALMATY_REGION" 23 | ], 24 | "creationDate": "Feb 7, 2016 7:55:22 PM", 25 | "lastChange": "Feb 7, 2016 7:55:22 PM" 26 | }, 27 | { 28 | "elasticSearchId": "", 29 | "newsPortalName": "Zakon.kz", 30 | "date": "Feb 7, 2016 7:32:00 PM", 31 | "title": "Солисты группы \"Меломен\" попали в ДТП в Алматы", 32 | "URL": "http://www.zakon.kz/4773540-solisty-gruppy-melomen-popali-v-dtp-v.html", 33 | "tags": [], 34 | "type": "NEWS", 35 | "notificationId": -1198528193, 36 | "body": "Солисты казахстанской группы \"Меломен\" перевернулись на автомобиле Lexus в Алматы, сообщает Baistars.kz.\n\nПо информации портала, ДТП произошло 7 февраля в 04.00 на проспекте Аль-Фараби. За рулем машины находился солист группы Жигер Ауыпбаев. В салоне авто также находилось трое участников группы. Артисты следовали в урочище Алма-Арасан.\n\nВодитель, двигаясь по Аль-Фараби, собирался повернуть в разрешенном месте. Однако в момент поворота в них врезался внедорожник Nissan.\n\nОт удара Lexus перевернулся, его отбросило на обочину. Как сообщает издание, трое пассажиров не пострадали. Водителя Жигера Ауыпбаева доставили в 12 ГКБ. Он находится под наблюдением врачей.\n\nФото: Baistars.kz.", 37 | "lang": "RU", 38 | "region": [ 39 | "ALMATY" 40 | ], 41 | "creationDate": "Feb 7, 2016 7:55:17 PM", 42 | "lastChange": "Feb 7, 2016 7:55:17 PM" 43 | }, 44 | { 45 | "elasticSearchId": "", 46 | "newsPortalName": "Tengrinews.kz", 47 | "date": "Feb 7, 2016 7:23:11 PM", 48 | "title": "Солисты \"Меломен\" перевернулись на автомобиле Lexus в Алматы", 49 | "URL": "http://tengrinews.kz/events/solistyi-melomen-perevernulis-na-avtomobile-Lexus-v-almatyi-288612/", 50 | "tags": [ 51 | "Казахстанский шоу-бизнес" 52 | ], 53 | "type": "NEWS", 54 | "notificationId": 292974474, 55 | "body": "Солисты казахстанской группы \"Меломен\" перевернулись на автомобиле Lexus в Алматы, передает Baistars.kz.\nКак сообщает издание, ДТП произошло утром 7 февраля в 4.00 на проспекте Аль-Фараби. За рулем машины находился солист группы Жигер Ауыпбаев вместе с тремя другими участниками. Они направлялись в урочище Алма-Арасан. Водитель авто, двигаясь по Аль-Фараби, пытался повернуть на лево в положенном месте. В момент совершения маневра к ним сзади на большой скорости въехал внедорожник Nissan.\nОт сильного удара Lexus перевернулся и оказался на обочине дороги. По предварительным данным все трое пассажиров не пострадали. Однако водителя Ауыпбаева доставили в Центральную городскую клиническую больницу №12. На данный момент он находится под наблюдением врачей.\nСтоит отметить, что 10 февраля Жигер Ауыпбаев должен принять участие в предпоказе фильма \"Жениться за 72 часа\", где он играет в главной роли. В кинотеатрах картина стартует с 11 февраля.", 56 | "lang": "RU", 57 | "region": [ 58 | "ALMATY" 59 | ], 60 | "creationDate": "Feb 7, 2016 7:23:12 PM", 61 | "lastChange": "Feb 7, 2016 7:23:12 PM" 62 | }, 63 | { 64 | "elasticSearchId": "", 65 | "newsPortalName": "Caravan.kz", 66 | "date": "Feb 7, 2016 6:18:47 PM", 67 | "title": "Умер шестой побывавший на Луне человек", 68 | "URL": "http://news.caravan.kz/news/umer-shestojj-pobyvavshijj-na-lune-chelovek-newsID433009.html", 69 | "tags": [ 70 | "астронавт", 71 | " луна", 72 | " флорида" 73 | ], 74 | "type": "NEWS", 75 | "notificationId": 461715055, 76 | "body": "«Аполлон-14» отправился с мыса Канаверал 31 января 1971 года. Вместе с Митчеллом на Луну отправился американский астронавт Алан Шепард. Первыми людьми на Луне были Нил Армстронг и Базз\n\n\nСтоит отметить, что в декабре снова обострился спор о том, был ли на самом деле полет американцев на Луну.", 77 | "lang": "RU", 78 | "region": [ 79 | "GLOBAL" 80 | ], 81 | "creationDate": "Feb 7, 2016 6:18:54 PM", 82 | "lastChange": "Feb 7, 2016 6:18:54 PM" 83 | }, 84 | { 85 | "elasticSearchId": "", 86 | "newsPortalName": "Caravan.kz", 87 | "date": "Feb 7, 2016 6:18:49 PM", 88 | "title": "«АрселорМиттал Темиртау» выдал 10-миллионную тонну оцинкованного проката", 89 | "URL": "http://news.caravan.kz/news/arselormittal-temirtau-vydal-10millionnuyu-tonnu-ocinkovannogo-prokata-newsID433008.html", 90 | "tags": [ 91 | "«АрселорМиттал", 92 | "Темиртау»", 93 | "выдал", 94 | "10-миллионную", 95 | "тонну", 96 | "оцинкованного", 97 | "проката" 98 | ], 99 | "type": "NEWS", 100 | "notificationId": 714266398, 101 | "body": "Это был один из первых инвестиционных проектов, реализованных с момента прихода компании в Казахстан. Уникальное для Казахстана производство позволило не только вывести металлургию страны на уровень более высоких технологий, но и открыло новые рынки сбыта», - говорится в сообщении.\nОтмечается, что сегодня в цехе цинкования и алюминирования трудятся 268 человек технологического персонала и 100 работников ремонтных служб металлургического комбината. «Почти 18 лет ЦГЦА работает со 100-процентной загрузкой производственных мощностей, выпуская в месяц более 50 тысяч тонн продукции», - указано в сообщении.\nВ 2002 году был введен в эксплуатацию второй агрегат непрерывного горячего цинкования. В 2004-м была достигнута максимальная производственная мощность двух линий цинкования - 768 тыс. тонн оцинкованного металла в год.\n«Агрегаты выпускают горячеоцинкованный прокат в рулонах, толщина полосы составляет от 0,25 до 2,0 мм, ширина - от 750 до 1550 мм. В 2014 году была успешно внедрена технология производства безсвинцового оцинкованного покрытия, что позволило компании предложить покупателям прокат как с узором кристаллизации, так и с матовым покрытием», - добавила пресс-служба компании.\nПродукция востребована в строительной промышленности. Кроме того, оцинковый прокат используется для производства мебельной фурнитуры и предметов бытовой техники.\n«Оцинкованная продукция казахстанского металлургического комбината экспортировалась в 80 стран мира. В США, Канаде, странах Евросоюза, Южной Африке узнали о казахстанском металле», - говорит бессменный с момента запуска руководитель ЦГЦА Анатолий Ильяшенко.\nАО «АрселорМиттал Темиртау» входит в состав компании АрселорМиттал и является крупнейшим предприятием горно-металлургического сектора Республики Казахстан. Предприятие представляет собой интегрированный горно-металлургический комплекс с собственным углем, железной рудой и энергетической базой. В состав «АрселорМиттал Темиртау» входят металлургический комбинат в г.Темиртау, 8 угольных шахт в Карагандинской области, 4 рудника по добыче железной руды в Карагандинской, Акмолинской и Костанайской областях.", 102 | "lang": "RU", 103 | "region": [ 104 | "KARAGANDA_REGION" 105 | ], 106 | "creationDate": "Feb 7, 2016 6:18:54 PM", 107 | "lastChange": "Feb 7, 2016 6:18:54 PM" 108 | }, 109 | { 110 | "elasticSearchId": "", 111 | "newsPortalName": "Caravan.kz", 112 | "date": "Feb 7, 2016 6:18:52 PM", 113 | "title": "ОАЭ готовы отправить войска в Сирию", 114 | "URL": "http://news.caravan.kz/news/oaeh-gotovy-otpravit-vojjska-v-siriyu-newsID433007.html", 115 | "tags": [ 116 | "ОАЭ", 117 | " Сирия", 118 | " войска", 119 | " исламское государство" 120 | ], 121 | "type": "NEWS", 122 | "notificationId": 181932436, 123 | "body": "Объединенные Арабские Эмираты готовы отправить наземные войска в Сирию в рамках международной коалиции по борьбе против террористической группировки «Исламское государство», передает РБК.\n\n\n«Наша позиция заключается в том, что реальная кампания против Daesh [ИГ] должна включать в себя наземные войска», — сказал государственный министр ОАЭ по иностранным делам Анвар Гаргаш на пресс-конференции в Абу-Даби.\n\n\nПри этом министр уточнил, что речь не идет о «тысячах солдат». Также Гаргаш добавил, что ОАЭ принимает как необходимое услвоие «руководство США» в коалиции.", 124 | "lang": "RU", 125 | "region": [ 126 | "GLOBAL" 127 | ], 128 | "creationDate": "Feb 7, 2016 6:18:54 PM", 129 | "lastChange": "Feb 7, 2016 6:18:54 PM" 130 | }, 131 | { 132 | "elasticSearchId": "", 133 | "newsPortalName": "Zakon.kz", 134 | "date": "Feb 7, 2016 4:14:00 PM", 135 | "title": "Четыре медали завоевали казахстанские боксёры в Венгрии", 136 | "URL": "http://www.zakon.kz/4773530-chetyre-medali-zavoevali-kazakhstanskie.html", 137 | "tags": [], 138 | "type": "NEWS", 139 | "notificationId": -1914264034, 140 | "body": "Одно золото и три серебряных медали завоевали наши боксёры в Венгрии на турнире памяти Иштвана Боская, передает Zakon.kz со ссылкой на пресс-службу Казахстанской федерации бокса (КФБ). В соревнованиях участвовали 168 боксёров из 29 стран мира. Казахстан представляли пять спортсменов. Один из них, Абильхан Аманкул, выбыл из борьбы на стадии четвертьфинала, все остальные вернуться домой с наградами. В финале золото в схватке с азербайджанцем Сотомайором Лоренцо завоевал Абылайхан Жусупов (64). Серебряные медали достались Ильясу Сулейменову (52 кг), Айкынбаю Шалкару (49 кг) и Али Ахмедову (81 кг). Фото: пресс-служба КФБ.\nОдно золото и три серебряных медали завоевали наши боксёры в Венгрии на турнире памяти Иштвана Боская, передает Zakon.kz со ссылкой на пресс-службу Казахстанской федерации бокса (КФБ).\n\nВ соревнованиях участвовали 168 боксёров из 29 стран мира. Казахстан представляли пять спортсменов. Один из них, Абильхан Аманкул, выбыл из борьбы на стадии четвертьфинала, все остальные вернуться домой с наградами.\n\nВ финале золото в схватке с азербайджанцем Сотомайором Лоренцо завоевал Абылайхан Жусупов (64). Серебряные медали достались Ильясу Сулейменову (52 кг), Айкынбаю Шалкару (49 кг) и Али Ахмедову (81 кг).\n\nФото: пресс-служба КФБ.", 141 | "lang": "RU", 142 | "region": [ 143 | "GLOBAL" 144 | ], 145 | "creationDate": "Feb 7, 2016 4:42:09 PM", 146 | "lastChange": "Feb 7, 2016 4:42:09 PM" 147 | }, 148 | { 149 | "elasticSearchId": "", 150 | "newsPortalName": "Caravan.kz", 151 | "date": "Feb 7, 2016 4:10:02 PM", 152 | "title": "Мальчик убил 8-летнюю соседку за отказ показать ему щенков в США", 153 | "URL": "http://news.caravan.kz/news/malchik-ubil-8letnyuyu-sosedku-za-otkaz-pokazat-emu-shhenkov-v-ssha-newsID433005.html", 154 | "tags": [ 155 | "америка", 156 | " убийство", 157 | " сша", 158 | " застрелил", 159 | " мальчик", 160 | " щенки" 161 | ], 162 | "type": "NEWS", 163 | "notificationId": 1158696415, 164 | "body": "Суд по делам несовершеннолетних штата Теннесси приговорил к лишению свободы 11-летнего мальчика, застрелившего из помпового ружья 8-летнюю соседку, которая играла под окном его дома, пишет Zakon.kz.\n\n\nПроисшествие, которое повергло в шок местных жителей, произошло 3 октября в небольшом городке Уайт Паин. Девочка Маккайла Даер на лужайке своего дома играла с подружками. Её 11-летний сосед из окна своего дома попросил показать ему щенков. Когда девочка отказала в просьбе, сосед нацелил на неё из окна помповое ружье отца. Маккайла рассмеялась, сказав что оружие не настоящее. Тогда мальчик убедился, что оно заряжено, взвел курок и выстрелил. Девочка потеряла сознание от раны в голову и позднее скончалась на руках матери.\n\n\nСудья Ювенальной юстиции округа Джефферсон Деннис Роач признал мальчика виновным в предумышленном убийстве и приговорил его к заключению в исправительном учреждении штата до достижения 19-ти лет, говорится в приговоре.\n\n\n\"Ребенок не может быть отпущен на самотек в общество после совершения предумышленного убийства\", — пояснил судья, оглашая приговор.\n\n\nСогласно местному законодательству, пресса не называет имя и фамилию подсудимого несовершеннолетнего.\n\n\nВ материалах уголовного дела отмечается, что отец и дед обучали мальчика технике безопасности при обращении с оружием.\n\n\nСлучаи, когда дети совершают убийства из огнестрельного оружия в США не редкость, однако, в основном, это происходит в результате стрельбы по неосторожности или вообще без намерения сделать выстрел.", 165 | "lang": "RU", 166 | "region": [ 167 | "GLOBAL" 168 | ], 169 | "creationDate": "Feb 7, 2016 4:10:03 PM", 170 | "lastChange": "Feb 7, 2016 4:10:03 PM" 171 | }, 172 | { 173 | "elasticSearchId": "", 174 | "date": "Feb 7, 2016 12:00:00 AM", 175 | "title": "Угроза схода лавин", 176 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003638", 177 | "tags": [], 178 | "type": "NEWS", 179 | "notificationId": 36424902, 180 | "body": "По информации филиала ВКОЭУ ГУ «Казселезащита» с 07.02 – 09.02 в горных районах Восточно-Казахстанской области ожидается сход снежных лавин.", 181 | "lang": "RU", 182 | "region": [ 183 | "VKO_REGION" 184 | ], 185 | "creationDate": "Feb 7, 2016 4:09:32 PM", 186 | "lastChange": "Feb 7, 2016 4:09:32 PM" 187 | }, 188 | { 189 | "elasticSearchId": "", 190 | "newsPortalName": "Caravan.kz", 191 | "date": "Feb 7, 2016 3:05:43 PM", 192 | "title": "Австралия, Япония и Китай осудили запуск ракеты КНДР", 193 | "URL": "http://news.caravan.kz/news/avstraliya-yaponiya-i-kitajj-osudili-zapusk-rakety-kndr-newsID433004.html", 194 | "tags": [ 195 | "австралия", 196 | " япония", 197 | " китай", 198 | " кндр", 199 | " запуск ракеты" 200 | ], 201 | "type": "NEWS", 202 | "notificationId": -1001041054, 203 | "body": "Австралийский министр иностранных дел Джули Бишоп подчеркнула, что правительство страны присоединяется к международному сообществу с осуждением \"провокационного, опасного и дестабилизационного\" поведения Пхеньяна, сообщает \"Газета.RU\" со ссылкой на Sky News.\n\n\n\"Северная Корея продолжает представлять угрозу для региона и земного шара\", — добавила она.\n\n\nТакже отмечается, что японский премьер Синдзо Абэ также называют запуск \"абсолютно неприемлемым\".\n\n\nВ свою очередь, официальный представитель МИД КНР Хуа Чуньин сообщил, что Пекин сожалеет о решении Пхеньяна провести запуск вопреки возражениям мирового сообщества, передает CNN.\n\n\nРанее генсек ООН Пан Ги Мун назвал глубоко прискорбным факт запуска ракеты КНДР. По данным государственного агентства Северной Кореи ЦТАК, запуск ракеты со спутником Kwangmyongsong-4 прошел успешно.\n\n\nНесмотря на заявления Пхеньяна о запуске спутника наблюдения, в мире предполагают, что КНДР тестирует межконтинентальную баллистическую ракету.", 204 | "lang": "RU", 205 | "region": [ 206 | "GLOBAL" 207 | ], 208 | "creationDate": "Feb 7, 2016 3:05:43 PM", 209 | "lastChange": "Feb 7, 2016 3:05:43 PM" 210 | }, 211 | { 212 | "elasticSearchId": "", 213 | "date": "Feb 7, 2016 12:00:00 AM", 214 | "title": "Открытие движения на автодорогах", 215 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003637", 216 | "tags": [], 217 | "type": "NEWS", 218 | "notificationId": -1536984454, 219 | "body": "07.02. с 12-50 открыто движение на а/д республиканского значения «Алматы-Усть-Каменогорск»» (977-1048 км) (с.Калбатау-поворот с.Уланское) для всех видов автотранспорта.", 220 | "lang": "RU", 221 | "region": [ 222 | "VKO_REGION", 223 | "GLOBAL" 224 | ], 225 | "creationDate": "Feb 7, 2016 2:00:54 PM", 226 | "lastChange": "Feb 7, 2016 2:00:54 PM" 227 | }, 228 | { 229 | "elasticSearchId": "", 230 | "newsPortalName": "Tengrinews.kz", 231 | "date": "Feb 7, 2016 1:29:04 PM", 232 | "title": "Обстоятельства ДТП с полицейским рассказали в ДВД Астаны", 233 | "URL": "http://tengrinews.kz/kazakhstan_news/obstoyatelstva-dtp-s-politseyskim-rasskazali-v-dvd-astanyi-288607/", 234 | "tags": [ 235 | "Акмолинская область", 236 | " Астана", 237 | " ДТП", 238 | " Правоохранительные органы" 239 | ], 240 | "type": "NEWS", 241 | "notificationId": 20876051, 242 | "body": "В ДВД Астаны рассказали подробности ДТП с участием полицейского, сообщает корреспондент Tengrinews.kz.\nПо информации пресс-службы, авария произошла 1 февраля около 10.00 утра по улице Акжол напротив АЗС \"КазМунайГаз\" в Астане. \"Водитель автомашины Mercedes, сотрудник полка дорожно-патрульной полиции ДВД Астаны, двигаясь по улице Акжол со стороны улицы Пушкина в сторону улицы Станция 40-я в условиях скользкого дорожного покрытия не справился с управлением, выехал на полосу встречного движения и допустил столкновение с автомашиной Kia Rio. В результате ДТП телесные повреждения получили оба водителя и два пассажира автомашин. В дальнейшем водитель Kia Rio был госпитализирован, остальные участники отказались от госпитализации\", - сообщили в ДВД Астаны. \nВ департаменте также отметили, что на момент совершения ДТП оба водителя были трезвы. \nСотрудник полка полиции и его напарник были в форменном обмундировании и возвращались домой после дежурства. По факту аварии проводится дознание.", 243 | "lang": "RU", 244 | "region": [ 245 | "ASTANA", 246 | "AKMOLA_REGION", 247 | "AKTOBE_REGION", 248 | "ALMATY_REGION" 249 | ], 250 | "creationDate": "Feb 7, 2016 1:29:05 PM", 251 | "lastChange": "Feb 7, 2016 1:29:05 PM" 252 | }, 253 | { 254 | "elasticSearchId": "", 255 | "newsPortalName": "Zakon.kz", 256 | "date": "Feb 7, 2016 12:54:00 PM", 257 | "title": "В Минобороны РК рассказали о причинах изменения строевого шага военнослужащих", 258 | "URL": "http://www.zakon.kz/4773520-v-minoborony-rk-rasskazali-o-prichinakh.html", 259 | "tags": [], 260 | "type": "NEWS", 261 | "notificationId": 784690012, 262 | "body": "Министерство обороны Казахстана разъяснило, для чего у военнослужащих был изменен строевой шаг, передает Kazpravda.kz.\n\nНапомним, что теперь длина шага сокращена с 80 до 60–70 см, темп уменьшен со 120 до 95–105 шагов в минуту, а высота – с 20 до 15 см.\n\nПроведенное на базе Военного института Сухопутных войск исследование показало, что применяемый ранее строевой шаг давал излишнюю нагрузку на костно-мышечную систему военнослужащих, уточнили в оборонном ведомстве.\n\n\"Боевая экипировка современного казахстанского военнослужащего в полной амуниции достигает до 25 килограммов, соответственно, перемещение в строю на большие расстояния требует значительных усилий\", – уточнил заместитель начальника Главного управления военной полиции ВС РК полковник Алексей Скорняков.\n\nВ военном ведомстве отметили, что визуально строевой шаг существенных изменений не претерпел.\n\nИнициатива Министерства обороны была поддержана военнослужащими других войск и воинских формирований РК и утверждена Верховным Главнокомандующим – Главой государства – соответствующий указ был опубликован на сайте Акорды 3 февраля. В новой редакции изложены Устав внутренней службы, Устав гарнизонной и караульной служб, Дисциплинарный устав, а также незначительные изменения внесены в Строевой устав.\n\nФото: пресс-служба МО РК.", 263 | "lang": "RU", 264 | "region": [ 265 | "GLOBAL" 266 | ], 267 | "creationDate": "Feb 7, 2016 12:56:52 PM", 268 | "lastChange": "Feb 7, 2016 12:56:52 PM" 269 | }, 270 | { 271 | "elasticSearchId": "", 272 | "newsPortalName": "Zakon.kz", 273 | "date": "Feb 7, 2016 12:33:00 PM", 274 | "title": "Казахстан намерен вступить в Гаагскую конференцию по международному частному праву", 275 | "URL": "http://www.zakon.kz/4773519-kazakhstan-nameren-vstupit-v-gaagskuju.html", 276 | "tags": [], 277 | "type": "NEWS", 278 | "notificationId": -31798030, 279 | "body": "Казахстан намерен вступить в Гаагскую конференцию по международному частному праву, передает Казинформ.\n\n«В рамках реализации поручения Главы государства в Послании народу Казахстана «Стратегия - 2050» о совершенствовании и обеспечении правовой защиты наших граждан, их личных, семейных, деловых интересов за рубежом министерством принят ряд мер по присоединению к соответствующим многосторонним конвенциям. Кроме того, проработан вопрос вступления в Гаагскую конференцию по международному частному праву, деятельность которой посвящена унификации норм международного частного права и международного гражданского процесса», - говорится в информации Министерства юстиции РК.\n\nОтмечается, что одним из достоинств организации является то, что более трети всех разработанных и принятых Гаагской конференцией конвенций это документы, регулирующие семейные отношения с иностранным элементом. Участниками Гаагской конференции являются 79 государств и Европейский союз, в том числе государства из 30-ки самых развитых стран ОЭСР.\n\n«Основными преимуществами членства Казахстана в Гаагской конференции, безусловно, станет географический охват и возможность оказания правовой помощи гражданам посредством общего, универсального порядка. Также членство в Гаагской конференции будет способствовать дальнейшему развитию правовой системы Казахстана с учетом мировых стандартов, повышению эффективности защиты прав и интересов казахстанских граждан за рубежом», - сообщили в министерстве.\n\nДамир Байманов.\n\nФото: analitika.kz.", 280 | "lang": "RU", 281 | "region": [ 282 | "GLOBAL" 283 | ], 284 | "creationDate": "Feb 7, 2016 12:56:52 PM", 285 | "lastChange": "Feb 7, 2016 12:56:52 PM" 286 | }, 287 | { 288 | "elasticSearchId": "", 289 | "date": "Feb 7, 2016 12:00:00 AM", 290 | "title": "Открытие движения на автодорогах", 291 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003635", 292 | "tags": [], 293 | "type": "NEWS", 294 | "notificationId": -750348159, 295 | "body": "07.02. с 12-00 открыто движение на а/д областного значения «Бородулиха-Жезкент» 0-49 км, для всех видов автотранспорта.", 296 | "lang": "RU", 297 | "region": [ 298 | "VKO_REGION" 299 | ], 300 | "creationDate": "Feb 7, 2016 12:55:52 PM", 301 | "lastChange": "Feb 7, 2016 12:55:52 PM" 302 | }, 303 | { 304 | "elasticSearchId": "", 305 | "newsPortalName": "Caravan.kz", 306 | "date": "Feb 7, 2016 11:51:28 AM", 307 | "title": "В Казахстане 440 тысяч безработных", 308 | "URL": "http://news.caravan.kz/news/v-kazakhstane-440-tysyach-bezrabotnykh-newsID433002.html", 309 | "tags": [ 310 | "безработица", 311 | " казахстанцы", 312 | " биржан нурымбетов", 313 | " вице-министр здравоохранения" 314 | ], 315 | "type": "NEWS", 316 | "notificationId": 800088146, 317 | "body": "За 2015 год работу потеряли 13 тысяч казахстанцев, сообщил вице-министр здравоохранения и социального развития РК Биржан Нурымбетов на брифинге, посвященном законопроекту «О занятости населения», передает ИА Новости-Казахстан.\n\n\n«Эти 443 тысячи — это те люди, которые на 1 января у нас безработные. Кто в 2015 году остался без работы? Здесь я не скажу, по каким отраслям, но у нас официально на предприятиях потеряли работу 13 тысяч человек», — сказал Нурымбетов.\n\n\nКомментируя данные ЕАЭС, согласно которым без работы в Казахстане в 2015 году остались 34 тысячи человек, он пояснил, что вести учет людей, которые уволились по собственному желанию, невозможно.\n\n\n«Если мне не нравится работа, и я уволился — этого мы, как министерство, не можем учесть, мы сведениями об этом не располагаем. Мы больше те предприятия отслеживаем, где прошли сокращения. По закону предприятия обязаны уведомить центры занятости, что он сокращает этих людей. Этот учет мы ведем. А вот когда человек сам увольняется, меняет работу — этот учет вести тяжеловато», — добавил в заключении вице-министр.", 318 | "lang": "RU", 319 | "region": [ 320 | "GLOBAL" 321 | ], 322 | "creationDate": "Feb 7, 2016 11:51:29 AM", 323 | "lastChange": "Feb 7, 2016 11:51:29 AM" 324 | }, 325 | { 326 | "elasticSearchId": "", 327 | "date": "Feb 7, 2016 12:00:00 AM", 328 | "title": "Открытие движения на автодорогах", 329 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003634", 330 | "tags": [], 331 | "type": "NEWS", 332 | "notificationId": 150936723, 333 | "body": "07.02. с 11-30 открыто движение на а/д областного значения «Дмитриевка-Бородулиха-Шемонаиха» 0-87 км, для всех видов автотранспорта.", 334 | "lang": "RU", 335 | "region": [ 336 | "VKO_REGION" 337 | ], 338 | "creationDate": "Feb 7, 2016 11:50:31 AM", 339 | "lastChange": "Feb 7, 2016 11:50:31 AM" 340 | } 341 | ] -------------------------------------------------------------------------------- /src/test/java/kz/kaznu/lucene/BasicSearchExamplesTest.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene; 2 | 3 | import kz.kaznu.lucene.constants.Constants; 4 | import kz.kaznu.lucene.index.MessageIndexer; 5 | import kz.kaznu.lucene.utils.Helper; 6 | import org.apache.commons.io.FileUtils; 7 | import org.apache.lucene.document.Document; 8 | import org.junit.After; 9 | import org.junit.Test; 10 | 11 | import java.io.File; 12 | import java.io.FileNotFoundException; 13 | import java.util.List; 14 | import java.util.Random; 15 | 16 | import static org.junit.Assert.*; 17 | 18 | public class BasicSearchExamplesTest { 19 | private final Random rnd = new Random(); // to generate safe name for index folder. After tests we removing folders 20 | private final MessageIndexer indexer = new MessageIndexer(Constants.TMP_DIR + "/tutorial_test" + rnd.nextInt()); 21 | final ClassLoader classLoader = getClass().getClassLoader(); 22 | final File file = new File(classLoader.getResource("tutorial.json").getFile()); 23 | final List documents; 24 | 25 | public BasicSearchExamplesTest() throws FileNotFoundException { 26 | documents = Helper.readDocumentsFromFile(file); 27 | } 28 | 29 | @Test 30 | public void testSearch() throws Exception { 31 | indexer.index(true, documents); // create index 32 | 33 | final BasicSearchExamples searchWith = new BasicSearchExamples(indexer.readIndex()); 34 | searchWith.searchInBody("корреспондент"); 35 | } 36 | 37 | @Test 38 | public void testSearchWithMistake() throws Exception { 39 | indexer.index(true, documents); // create index 40 | 41 | final BasicSearchExamples searchWith = new BasicSearchExamples(indexer.readIndex()); 42 | searchWith.searchInBody("кореспондент"); 43 | } 44 | 45 | @Test 46 | public void fuzzySearchWithMistake() throws Exception { 47 | indexer.index(true, documents); // create index 48 | 49 | final BasicSearchExamples searchWith = new BasicSearchExamples(indexer.readIndex()); 50 | searchWith.fuzzySearch("кореспондент"); 51 | } 52 | 53 | @Test 54 | public void fuzzySearch() throws Exception { 55 | indexer.index(true, documents); // create index 56 | 57 | final BasicSearchExamples searchWith = new BasicSearchExamples(indexer.readIndex()); 58 | searchWith.fuzzySearch("дорога"); 59 | } 60 | 61 | @After 62 | public void removeIndexes() { 63 | FileUtils.deleteQuietly(new File(indexer.getPathToIndexFolder())); // remove indexes 64 | } 65 | } -------------------------------------------------------------------------------- /src/test/java/kz/kaznu/lucene/index/MessageIndexerTest.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.index; 2 | 3 | import kz.kaznu.lucene.constants.Constants; 4 | import org.apache.commons.io.FileUtils; 5 | import org.apache.lucene.document.Document; 6 | import org.apache.lucene.index.IndexReader; 7 | import org.junit.After; 8 | import org.junit.Assert; 9 | import org.junit.Before; 10 | import org.junit.Test; 11 | 12 | import java.io.File; 13 | import java.util.Random; 14 | 15 | public class MessageIndexerTest { 16 | private final Random rnd = new Random(); // to generate safe name for index folder. After tests we removing folders 17 | 18 | private final MessageIndexer indexer = new MessageIndexer(Constants.TMP_DIR + "/tutorial_test" + rnd.nextInt()); 19 | private final String body = "Это тестовое тело документа."; 20 | private final String title = "Это тестовый загаловок документа."; 21 | 22 | private Document document = null; 23 | 24 | @Test 25 | @Before 26 | public void testIndex() throws Exception { 27 | document = MessageToDocument.createWith(title, body); 28 | Assert.assertNotNull("Created document should not be null", document); 29 | Assert.assertEquals(body, document.get("body")); 30 | Assert.assertEquals(title, document.get("title")); 31 | 32 | } 33 | 34 | @Test 35 | @After 36 | public void testReadIndex() throws Exception { 37 | indexer.index(true, document); // should create index without any errors 38 | 39 | final IndexReader indexReader = indexer.readIndex(); 40 | Assert.assertNotNull("IndexReader should not be null", indexReader); 41 | 42 | FileUtils.deleteQuietly(new File(indexer.getPathToIndexFolder())); // remove indexes 43 | } 44 | } -------------------------------------------------------------------------------- /src/test/java/kz/kaznu/lucene/utils/HelperTest.java: -------------------------------------------------------------------------------- 1 | package kz.kaznu.lucene.utils; 2 | 3 | import org.apache.lucene.document.Document; 4 | import org.junit.Assert; 5 | import org.junit.Test; 6 | 7 | import java.io.File; 8 | import java.util.List; 9 | 10 | public class HelperTest { 11 | 12 | @Test 13 | public void testReadDocumentsFromFile() throws Exception { 14 | final ClassLoader classLoader = getClass().getClassLoader(); 15 | final File file = new File(classLoader.getResource("tutorial.json").getFile()); 16 | final List documents = Helper.readDocumentsFromFile(file); 17 | Assert.assertEquals("Should successfully read 17 documents", 17, documents.size()); 18 | } 19 | } -------------------------------------------------------------------------------- /src/test/resources/tutorial.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "elasticSearchId": "", 4 | "newsPortalName": "Tengrinews.kz", 5 | "date": "Feb 7, 2016 7:55:20 PM", 6 | "title": "О ДТП с полицейским рассказали в ДВД Астаны", 7 | "URL": "http://tengrinews.kz/kazakhstan_news/o-dtp-s-politseyskim-rasskazali-v-dvd-astanyi-288607/", 8 | "tags": [ 9 | "Акмолинская область", 10 | " Астана", 11 | " ДТП", 12 | " Правоохранительные органы" 13 | ], 14 | "type": "NEWS", 15 | "notificationId": 1934112985, 16 | "body": "В ДВД Астаны рассказали подробности ДТП с участием полицейского, сообщает корреспондент Tengrinews.kz.\nПо информации пресс-службы, авария произошла 1 февраля около 10.00 утра по улице Акжол напротив АЗС \"КазМунайГаз\" в Астане. \"Водитель автомашины Mercedes, сотрудник полка дорожно-патрульной полиции ДВД Астаны, двигаясь по улице Акжол со стороны улицы Пушкина в сторону улицы Станция 40-я в условиях скользкого дорожного покрытия не справился с управлением, выехал на полосу встречного движения и допустил столкновение с автомашиной Kia Rio. В результате ДТП телесные повреждения получили оба водителя и два пассажира автомашин. В дальнейшем водитель Kia Rio был госпитализирован, остальные участники отказались от госпитализации\", - сообщили в ДВД Астаны. \nВ департаменте также отметили, что на момент совершения ДТП оба водителя были трезвы. \nСотрудник полка полиции и его напарник были в форменном обмундировании и возвращались домой после дежурства. По факту аварии проводится дознание.", 17 | "lang": "RU", 18 | "region": [ 19 | "ASTANA", 20 | "AKMOLA_REGION", 21 | "AKTOBE_REGION", 22 | "ALMATY_REGION" 23 | ], 24 | "creationDate": "Feb 7, 2016 7:55:22 PM", 25 | "lastChange": "Feb 7, 2016 7:55:22 PM" 26 | }, 27 | { 28 | "elasticSearchId": "", 29 | "newsPortalName": "Zakon.kz", 30 | "date": "Feb 7, 2016 7:32:00 PM", 31 | "title": "Солисты группы \"Меломен\" попали в ДТП в Алматы", 32 | "URL": "http://www.zakon.kz/4773540-solisty-gruppy-melomen-popali-v-dtp-v.html", 33 | "tags": [], 34 | "type": "NEWS", 35 | "notificationId": -1198528193, 36 | "body": "Солисты казахстанской группы \"Меломен\" перевернулись на автомобиле Lexus в Алматы, сообщает Baistars.kz.\n\nПо информации портала, ДТП произошло 7 февраля в 04.00 на проспекте Аль-Фараби. За рулем машины находился солист группы Жигер Ауыпбаев. В салоне авто также находилось трое участников группы. Артисты следовали в урочище Алма-Арасан.\n\nВодитель, двигаясь по Аль-Фараби, собирался повернуть в разрешенном месте. Однако в момент поворота в них врезался внедорожник Nissan.\n\nОт удара Lexus перевернулся, его отбросило на обочину. Как сообщает издание, трое пассажиров не пострадали. Водителя Жигера Ауыпбаева доставили в 12 ГКБ. Он находится под наблюдением врачей.\n\nФото: Baistars.kz.", 37 | "lang": "RU", 38 | "region": [ 39 | "ALMATY" 40 | ], 41 | "creationDate": "Feb 7, 2016 7:55:17 PM", 42 | "lastChange": "Feb 7, 2016 7:55:17 PM" 43 | }, 44 | { 45 | "elasticSearchId": "", 46 | "newsPortalName": "Tengrinews.kz", 47 | "date": "Feb 7, 2016 7:23:11 PM", 48 | "title": "Солисты \"Меломен\" перевернулись на автомобиле Lexus в Алматы", 49 | "URL": "http://tengrinews.kz/events/solistyi-melomen-perevernulis-na-avtomobile-Lexus-v-almatyi-288612/", 50 | "tags": [ 51 | "Казахстанский шоу-бизнес" 52 | ], 53 | "type": "NEWS", 54 | "notificationId": 292974474, 55 | "body": "Солисты казахстанской группы \"Меломен\" перевернулись на автомобиле Lexus в Алматы, передает Baistars.kz.\nКак сообщает издание, ДТП произошло утром 7 февраля в 4.00 на проспекте Аль-Фараби. За рулем машины находился солист группы Жигер Ауыпбаев вместе с тремя другими участниками. Они направлялись в урочище Алма-Арасан. Водитель авто, двигаясь по Аль-Фараби, пытался повернуть на лево в положенном месте. В момент совершения маневра к ним сзади на большой скорости въехал внедорожник Nissan.\nОт сильного удара Lexus перевернулся и оказался на обочине дороги. По предварительным данным все трое пассажиров не пострадали. Однако водителя Ауыпбаева доставили в Центральную городскую клиническую больницу №12. На данный момент он находится под наблюдением врачей.\nСтоит отметить, что 10 февраля Жигер Ауыпбаев должен принять участие в предпоказе фильма \"Жениться за 72 часа\", где он играет в главной роли. В кинотеатрах картина стартует с 11 февраля.", 56 | "lang": "RU", 57 | "region": [ 58 | "ALMATY" 59 | ], 60 | "creationDate": "Feb 7, 2016 7:23:12 PM", 61 | "lastChange": "Feb 7, 2016 7:23:12 PM" 62 | }, 63 | { 64 | "elasticSearchId": "", 65 | "newsPortalName": "Caravan.kz", 66 | "date": "Feb 7, 2016 6:18:47 PM", 67 | "title": "Умер шестой побывавший на Луне человек", 68 | "URL": "http://news.caravan.kz/news/umer-shestojj-pobyvavshijj-na-lune-chelovek-newsID433009.html", 69 | "tags": [ 70 | "астронавт", 71 | " луна", 72 | " флорида" 73 | ], 74 | "type": "NEWS", 75 | "notificationId": 461715055, 76 | "body": "«Аполлон-14» отправился с мыса Канаверал 31 января 1971 года. Вместе с Митчеллом на Луну отправился американский астронавт Алан Шепард. Первыми людьми на Луне были Нил Армстронг и Базз\n\n\nСтоит отметить, что в декабре снова обострился спор о том, был ли на самом деле полет американцев на Луну.", 77 | "lang": "RU", 78 | "region": [ 79 | "GLOBAL" 80 | ], 81 | "creationDate": "Feb 7, 2016 6:18:54 PM", 82 | "lastChange": "Feb 7, 2016 6:18:54 PM" 83 | }, 84 | { 85 | "elasticSearchId": "", 86 | "newsPortalName": "Caravan.kz", 87 | "date": "Feb 7, 2016 6:18:49 PM", 88 | "title": "«АрселорМиттал Темиртау» выдал 10-миллионную тонну оцинкованного проката", 89 | "URL": "http://news.caravan.kz/news/arselormittal-temirtau-vydal-10millionnuyu-tonnu-ocinkovannogo-prokata-newsID433008.html", 90 | "tags": [ 91 | "«АрселорМиттал", 92 | "Темиртау»", 93 | "выдал", 94 | "10-миллионную", 95 | "тонну", 96 | "оцинкованного", 97 | "проката" 98 | ], 99 | "type": "NEWS", 100 | "notificationId": 714266398, 101 | "body": "Это был один из первых инвестиционных проектов, реализованных с момента прихода компании в Казахстан. Уникальное для Казахстана производство позволило не только вывести металлургию страны на уровень более высоких технологий, но и открыло новые рынки сбыта», - говорится в сообщении.\nОтмечается, что сегодня в цехе цинкования и алюминирования трудятся 268 человек технологического персонала и 100 работников ремонтных служб металлургического комбината. «Почти 18 лет ЦГЦА работает со 100-процентной загрузкой производственных мощностей, выпуская в месяц более 50 тысяч тонн продукции», - указано в сообщении.\nВ 2002 году был введен в эксплуатацию второй агрегат непрерывного горячего цинкования. В 2004-м была достигнута максимальная производственная мощность двух линий цинкования - 768 тыс. тонн оцинкованного металла в год.\n«Агрегаты выпускают горячеоцинкованный прокат в рулонах, толщина полосы составляет от 0,25 до 2,0 мм, ширина - от 750 до 1550 мм. В 2014 году была успешно внедрена технология производства безсвинцового оцинкованного покрытия, что позволило компании предложить покупателям прокат как с узором кристаллизации, так и с матовым покрытием», - добавила пресс-служба компании.\nПродукция востребована в строительной промышленности. Кроме того, оцинковый прокат используется для производства мебельной фурнитуры и предметов бытовой техники.\n«Оцинкованная продукция казахстанского металлургического комбината экспортировалась в 80 стран мира. В США, Канаде, странах Евросоюза, Южной Африке узнали о казахстанском металле», - говорит бессменный с момента запуска руководитель ЦГЦА Анатолий Ильяшенко.\nАО «АрселорМиттал Темиртау» входит в состав компании АрселорМиттал и является крупнейшим предприятием горно-металлургического сектора Республики Казахстан. Предприятие представляет собой интегрированный горно-металлургический комплекс с собственным углем, железной рудой и энергетической базой. В состав «АрселорМиттал Темиртау» входят металлургический комбинат в г.Темиртау, 8 угольных шахт в Карагандинской области, 4 рудника по добыче железной руды в Карагандинской, Акмолинской и Костанайской областях.", 102 | "lang": "RU", 103 | "region": [ 104 | "KARAGANDA_REGION" 105 | ], 106 | "creationDate": "Feb 7, 2016 6:18:54 PM", 107 | "lastChange": "Feb 7, 2016 6:18:54 PM" 108 | }, 109 | { 110 | "elasticSearchId": "", 111 | "newsPortalName": "Caravan.kz", 112 | "date": "Feb 7, 2016 6:18:52 PM", 113 | "title": "ОАЭ готовы отправить войска в Сирию", 114 | "URL": "http://news.caravan.kz/news/oaeh-gotovy-otpravit-vojjska-v-siriyu-newsID433007.html", 115 | "tags": [ 116 | "ОАЭ", 117 | " Сирия", 118 | " войска", 119 | " исламское государство" 120 | ], 121 | "type": "NEWS", 122 | "notificationId": 181932436, 123 | "body": "Объединенные Арабские Эмираты готовы отправить наземные войска в Сирию в рамках международной коалиции по борьбе против террористической группировки «Исламское государство», передает РБК.\n\n\n«Наша позиция заключается в том, что реальная кампания против Daesh [ИГ] должна включать в себя наземные войска», — сказал государственный министр ОАЭ по иностранным делам Анвар Гаргаш на пресс-конференции в Абу-Даби.\n\n\nПри этом министр уточнил, что речь не идет о «тысячах солдат». Также Гаргаш добавил, что ОАЭ принимает как необходимое услвоие «руководство США» в коалиции.", 124 | "lang": "RU", 125 | "region": [ 126 | "GLOBAL" 127 | ], 128 | "creationDate": "Feb 7, 2016 6:18:54 PM", 129 | "lastChange": "Feb 7, 2016 6:18:54 PM" 130 | }, 131 | { 132 | "elasticSearchId": "", 133 | "newsPortalName": "Zakon.kz", 134 | "date": "Feb 7, 2016 4:14:00 PM", 135 | "title": "Четыре медали завоевали казахстанские боксёры в Венгрии", 136 | "URL": "http://www.zakon.kz/4773530-chetyre-medali-zavoevali-kazakhstanskie.html", 137 | "tags": [], 138 | "type": "NEWS", 139 | "notificationId": -1914264034, 140 | "body": "Одно золото и три серебряных медали завоевали наши боксёры в Венгрии на турнире памяти Иштвана Боская, передает Zakon.kz со ссылкой на пресс-службу Казахстанской федерации бокса (КФБ). В соревнованиях участвовали 168 боксёров из 29 стран мира. Казахстан представляли пять спортсменов. Один из них, Абильхан Аманкул, выбыл из борьбы на стадии четвертьфинала, все остальные вернуться домой с наградами. В финале золото в схватке с азербайджанцем Сотомайором Лоренцо завоевал Абылайхан Жусупов (64). Серебряные медали достались Ильясу Сулейменову (52 кг), Айкынбаю Шалкару (49 кг) и Али Ахмедову (81 кг). Фото: пресс-служба КФБ.\nОдно золото и три серебряных медали завоевали наши боксёры в Венгрии на турнире памяти Иштвана Боская, передает Zakon.kz со ссылкой на пресс-службу Казахстанской федерации бокса (КФБ).\n\nВ соревнованиях участвовали 168 боксёров из 29 стран мира. Казахстан представляли пять спортсменов. Один из них, Абильхан Аманкул, выбыл из борьбы на стадии четвертьфинала, все остальные вернуться домой с наградами.\n\nВ финале золото в схватке с азербайджанцем Сотомайором Лоренцо завоевал Абылайхан Жусупов (64). Серебряные медали достались Ильясу Сулейменову (52 кг), Айкынбаю Шалкару (49 кг) и Али Ахмедову (81 кг).\n\nФото: пресс-служба КФБ.", 141 | "lang": "RU", 142 | "region": [ 143 | "GLOBAL" 144 | ], 145 | "creationDate": "Feb 7, 2016 4:42:09 PM", 146 | "lastChange": "Feb 7, 2016 4:42:09 PM" 147 | }, 148 | { 149 | "elasticSearchId": "", 150 | "newsPortalName": "Caravan.kz", 151 | "date": "Feb 7, 2016 4:10:02 PM", 152 | "title": "Мальчик убил 8-летнюю соседку за отказ показать ему щенков в США", 153 | "URL": "http://news.caravan.kz/news/malchik-ubil-8letnyuyu-sosedku-za-otkaz-pokazat-emu-shhenkov-v-ssha-newsID433005.html", 154 | "tags": [ 155 | "америка", 156 | " убийство", 157 | " сша", 158 | " застрелил", 159 | " мальчик", 160 | " щенки" 161 | ], 162 | "type": "NEWS", 163 | "notificationId": 1158696415, 164 | "body": "Суд по делам несовершеннолетних штата Теннесси приговорил к лишению свободы 11-летнего мальчика, застрелившего из помпового ружья 8-летнюю соседку, которая играла под окном его дома, пишет Zakon.kz.\n\n\nПроисшествие, которое повергло в шок местных жителей, произошло 3 октября в небольшом городке Уайт Паин. Девочка Маккайла Даер на лужайке своего дома играла с подружками. Её 11-летний сосед из окна своего дома попросил показать ему щенков. Когда девочка отказала в просьбе, сосед нацелил на неё из окна помповое ружье отца. Маккайла рассмеялась, сказав что оружие не настоящее. Тогда мальчик убедился, что оно заряжено, взвел курок и выстрелил. Девочка потеряла сознание от раны в голову и позднее скончалась на руках матери.\n\n\nСудья Ювенальной юстиции округа Джефферсон Деннис Роач признал мальчика виновным в предумышленном убийстве и приговорил его к заключению в исправительном учреждении штата до достижения 19-ти лет, говорится в приговоре.\n\n\n\"Ребенок не может быть отпущен на самотек в общество после совершения предумышленного убийства\", — пояснил судья, оглашая приговор.\n\n\nСогласно местному законодательству, пресса не называет имя и фамилию подсудимого несовершеннолетнего.\n\n\nВ материалах уголовного дела отмечается, что отец и дед обучали мальчика технике безопасности при обращении с оружием.\n\n\nСлучаи, когда дети совершают убийства из огнестрельного оружия в США не редкость, однако, в основном, это происходит в результате стрельбы по неосторожности или вообще без намерения сделать выстрел.", 165 | "lang": "RU", 166 | "region": [ 167 | "GLOBAL" 168 | ], 169 | "creationDate": "Feb 7, 2016 4:10:03 PM", 170 | "lastChange": "Feb 7, 2016 4:10:03 PM" 171 | }, 172 | { 173 | "elasticSearchId": "", 174 | "date": "Feb 7, 2016 12:00:00 AM", 175 | "title": "Угроза схода лавин", 176 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003638", 177 | "tags": [], 178 | "type": "NEWS", 179 | "notificationId": 36424902, 180 | "body": "По информации филиала ВКОЭУ ГУ «Казселезащита» с 07.02 – 09.02 в горных районах Восточно-Казахстанской области ожидается сход снежных лавин.", 181 | "lang": "RU", 182 | "region": [ 183 | "VKO_REGION" 184 | ], 185 | "creationDate": "Feb 7, 2016 4:09:32 PM", 186 | "lastChange": "Feb 7, 2016 4:09:32 PM" 187 | }, 188 | { 189 | "elasticSearchId": "", 190 | "newsPortalName": "Caravan.kz", 191 | "date": "Feb 7, 2016 3:05:43 PM", 192 | "title": "Австралия, Япония и Китай осудили запуск ракеты КНДР", 193 | "URL": "http://news.caravan.kz/news/avstraliya-yaponiya-i-kitajj-osudili-zapusk-rakety-kndr-newsID433004.html", 194 | "tags": [ 195 | "австралия", 196 | " япония", 197 | " китай", 198 | " кндр", 199 | " запуск ракеты" 200 | ], 201 | "type": "NEWS", 202 | "notificationId": -1001041054, 203 | "body": "Австралийский министр иностранных дел Джули Бишоп подчеркнула, что правительство страны присоединяется к международному сообществу с осуждением \"провокационного, опасного и дестабилизационного\" поведения Пхеньяна, сообщает \"Газета.RU\" со ссылкой на Sky News.\n\n\n\"Северная Корея продолжает представлять угрозу для региона и земного шара\", — добавила она.\n\n\nТакже отмечается, что японский премьер Синдзо Абэ также называют запуск \"абсолютно неприемлемым\".\n\n\nВ свою очередь, официальный представитель МИД КНР Хуа Чуньин сообщил, что Пекин сожалеет о решении Пхеньяна провести запуск вопреки возражениям мирового сообщества, передает CNN.\n\n\nРанее генсек ООН Пан Ги Мун назвал глубоко прискорбным факт запуска ракеты КНДР. По данным государственного агентства Северной Кореи ЦТАК, запуск ракеты со спутником Kwangmyongsong-4 прошел успешно.\n\n\nНесмотря на заявления Пхеньяна о запуске спутника наблюдения, в мире предполагают, что КНДР тестирует межконтинентальную баллистическую ракету.", 204 | "lang": "RU", 205 | "region": [ 206 | "GLOBAL" 207 | ], 208 | "creationDate": "Feb 7, 2016 3:05:43 PM", 209 | "lastChange": "Feb 7, 2016 3:05:43 PM" 210 | }, 211 | { 212 | "elasticSearchId": "", 213 | "date": "Feb 7, 2016 12:00:00 AM", 214 | "title": "Открытие движения на автодорогах", 215 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003637", 216 | "tags": [], 217 | "type": "NEWS", 218 | "notificationId": -1536984454, 219 | "body": "07.02. с 12-50 открыто движение на а/д республиканского значения «Алматы-Усть-Каменогорск»» (977-1048 км) (с.Калбатау-поворот с.Уланское) для всех видов автотранспорта.", 220 | "lang": "RU", 221 | "region": [ 222 | "VKO_REGION", 223 | "GLOBAL" 224 | ], 225 | "creationDate": "Feb 7, 2016 2:00:54 PM", 226 | "lastChange": "Feb 7, 2016 2:00:54 PM" 227 | }, 228 | { 229 | "elasticSearchId": "", 230 | "newsPortalName": "Tengrinews.kz", 231 | "date": "Feb 7, 2016 1:29:04 PM", 232 | "title": "Обстоятельства ДТП с полицейским рассказали в ДВД Астаны", 233 | "URL": "http://tengrinews.kz/kazakhstan_news/obstoyatelstva-dtp-s-politseyskim-rasskazali-v-dvd-astanyi-288607/", 234 | "tags": [ 235 | "Акмолинская область", 236 | " Астана", 237 | " ДТП", 238 | " Правоохранительные органы" 239 | ], 240 | "type": "NEWS", 241 | "notificationId": 20876051, 242 | "body": "В ДВД Астаны рассказали подробности ДТП с участием полицейского, сообщает корреспондент Tengrinews.kz.\nПо информации пресс-службы, авария произошла 1 февраля около 10.00 утра по улице Акжол напротив АЗС \"КазМунайГаз\" в Астане. \"Водитель автомашины Mercedes, сотрудник полка дорожно-патрульной полиции ДВД Астаны, двигаясь по улице Акжол со стороны улицы Пушкина в сторону улицы Станция 40-я в условиях скользкого дорожного покрытия не справился с управлением, выехал на полосу встречного движения и допустил столкновение с автомашиной Kia Rio. В результате ДТП телесные повреждения получили оба водителя и два пассажира автомашин. В дальнейшем водитель Kia Rio был госпитализирован, остальные участники отказались от госпитализации\", - сообщили в ДВД Астаны. \nВ департаменте также отметили, что на момент совершения ДТП оба водителя были трезвы. \nСотрудник полка полиции и его напарник были в форменном обмундировании и возвращались домой после дежурства. По факту аварии проводится дознание.", 243 | "lang": "RU", 244 | "region": [ 245 | "ASTANA", 246 | "AKMOLA_REGION", 247 | "AKTOBE_REGION", 248 | "ALMATY_REGION" 249 | ], 250 | "creationDate": "Feb 7, 2016 1:29:05 PM", 251 | "lastChange": "Feb 7, 2016 1:29:05 PM" 252 | }, 253 | { 254 | "elasticSearchId": "", 255 | "newsPortalName": "Zakon.kz", 256 | "date": "Feb 7, 2016 12:54:00 PM", 257 | "title": "В Минобороны РК рассказали о причинах изменения строевого шага военнослужащих", 258 | "URL": "http://www.zakon.kz/4773520-v-minoborony-rk-rasskazali-o-prichinakh.html", 259 | "tags": [], 260 | "type": "NEWS", 261 | "notificationId": 784690012, 262 | "body": "Министерство обороны Казахстана разъяснило, для чего у военнослужащих был изменен строевой шаг, передает Kazpravda.kz.\n\nНапомним, что теперь длина шага сокращена с 80 до 60–70 см, темп уменьшен со 120 до 95–105 шагов в минуту, а высота – с 20 до 15 см.\n\nПроведенное на базе Военного института Сухопутных войск исследование показало, что применяемый ранее строевой шаг давал излишнюю нагрузку на костно-мышечную систему военнослужащих, уточнили в оборонном ведомстве.\n\n\"Боевая экипировка современного казахстанского военнослужащего в полной амуниции достигает до 25 килограммов, соответственно, перемещение в строю на большие расстояния требует значительных усилий\", – уточнил заместитель начальника Главного управления военной полиции ВС РК полковник Алексей Скорняков.\n\nВ военном ведомстве отметили, что визуально строевой шаг существенных изменений не претерпел.\n\nИнициатива Министерства обороны была поддержана военнослужащими других войск и воинских формирований РК и утверждена Верховным Главнокомандующим – Главой государства – соответствующий указ был опубликован на сайте Акорды 3 февраля. В новой редакции изложены Устав внутренней службы, Устав гарнизонной и караульной служб, Дисциплинарный устав, а также незначительные изменения внесены в Строевой устав.\n\nФото: пресс-служба МО РК.", 263 | "lang": "RU", 264 | "region": [ 265 | "GLOBAL" 266 | ], 267 | "creationDate": "Feb 7, 2016 12:56:52 PM", 268 | "lastChange": "Feb 7, 2016 12:56:52 PM" 269 | }, 270 | { 271 | "elasticSearchId": "", 272 | "newsPortalName": "Zakon.kz", 273 | "date": "Feb 7, 2016 12:33:00 PM", 274 | "title": "Казахстан намерен вступить в Гаагскую конференцию по международному частному праву", 275 | "URL": "http://www.zakon.kz/4773519-kazakhstan-nameren-vstupit-v-gaagskuju.html", 276 | "tags": [], 277 | "type": "NEWS", 278 | "notificationId": -31798030, 279 | "body": "Казахстан намерен вступить в Гаагскую конференцию по международному частному праву, передает Казинформ.\n\n«В рамках реализации поручения Главы государства в Послании народу Казахстана «Стратегия - 2050» о совершенствовании и обеспечении правовой защиты наших граждан, их личных, семейных, деловых интересов за рубежом министерством принят ряд мер по присоединению к соответствующим многосторонним конвенциям. Кроме того, проработан вопрос вступления в Гаагскую конференцию по международному частному праву, деятельность которой посвящена унификации норм международного частного права и международного гражданского процесса», - говорится в информации Министерства юстиции РК.\n\nОтмечается, что одним из достоинств организации является то, что более трети всех разработанных и принятых Гаагской конференцией конвенций это документы, регулирующие семейные отношения с иностранным элементом. Участниками Гаагской конференции являются 79 государств и Европейский союз, в том числе государства из 30-ки самых развитых стран ОЭСР.\n\n«Основными преимуществами членства Казахстана в Гаагской конференции, безусловно, станет географический охват и возможность оказания правовой помощи гражданам посредством общего, универсального порядка. Также членство в Гаагской конференции будет способствовать дальнейшему развитию правовой системы Казахстана с учетом мировых стандартов, повышению эффективности защиты прав и интересов казахстанских граждан за рубежом», - сообщили в министерстве.\n\nДамир Байманов.\n\nФото: analitika.kz.", 280 | "lang": "RU", 281 | "region": [ 282 | "GLOBAL" 283 | ], 284 | "creationDate": "Feb 7, 2016 12:56:52 PM", 285 | "lastChange": "Feb 7, 2016 12:56:52 PM" 286 | }, 287 | { 288 | "elasticSearchId": "", 289 | "date": "Feb 7, 2016 12:00:00 AM", 290 | "title": "Открытие движения на автодорогах", 291 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003635", 292 | "tags": [], 293 | "type": "NEWS", 294 | "notificationId": -750348159, 295 | "body": "07.02. с 12-00 открыто движение на а/д областного значения «Бородулиха-Жезкент» 0-49 км, для всех видов автотранспорта.", 296 | "lang": "RU", 297 | "region": [ 298 | "VKO_REGION" 299 | ], 300 | "creationDate": "Feb 7, 2016 12:55:52 PM", 301 | "lastChange": "Feb 7, 2016 12:55:52 PM" 302 | }, 303 | { 304 | "elasticSearchId": "", 305 | "newsPortalName": "Caravan.kz", 306 | "date": "Feb 7, 2016 11:51:28 AM", 307 | "title": "В Казахстане 440 тысяч безработных", 308 | "URL": "http://news.caravan.kz/news/v-kazakhstane-440-tysyach-bezrabotnykh-newsID433002.html", 309 | "tags": [ 310 | "безработица", 311 | " казахстанцы", 312 | " биржан нурымбетов", 313 | " вице-министр здравоохранения" 314 | ], 315 | "type": "NEWS", 316 | "notificationId": 800088146, 317 | "body": "За 2015 год работу потеряли 13 тысяч казахстанцев, сообщил вице-министр здравоохранения и социального развития РК Биржан Нурымбетов на брифинге, посвященном законопроекту «О занятости населения», передает ИА Новости-Казахстан.\n\n\n«Эти 443 тысячи — это те люди, которые на 1 января у нас безработные. Кто в 2015 году остался без работы? Здесь я не скажу, по каким отраслям, но у нас официально на предприятиях потеряли работу 13 тысяч человек», — сказал Нурымбетов.\n\n\nКомментируя данные ЕАЭС, согласно которым без работы в Казахстане в 2015 году остались 34 тысячи человек, он пояснил, что вести учет людей, которые уволились по собственному желанию, невозможно.\n\n\n«Если мне не нравится работа, и я уволился — этого мы, как министерство, не можем учесть, мы сведениями об этом не располагаем. Мы больше те предприятия отслеживаем, где прошли сокращения. По закону предприятия обязаны уведомить центры занятости, что он сокращает этих людей. Этот учет мы ведем. А вот когда человек сам увольняется, меняет работу — этот учет вести тяжеловато», — добавил в заключении вице-министр.", 318 | "lang": "RU", 319 | "region": [ 320 | "GLOBAL" 321 | ], 322 | "creationDate": "Feb 7, 2016 11:51:29 AM", 323 | "lastChange": "Feb 7, 2016 11:51:29 AM" 324 | }, 325 | { 326 | "elasticSearchId": "", 327 | "date": "Feb 7, 2016 12:00:00 AM", 328 | "title": "Открытие движения на автодорогах", 329 | "URL": "http://www.vkogps.kz/ru/news.htm?id\u003d003634", 330 | "tags": [], 331 | "type": "NEWS", 332 | "notificationId": 150936723, 333 | "body": "07.02. с 11-30 открыто движение на а/д областного значения «Дмитриевка-Бородулиха-Шемонаиха» 0-87 км, для всех видов автотранспорта.", 334 | "lang": "RU", 335 | "region": [ 336 | "VKO_REGION" 337 | ], 338 | "creationDate": "Feb 7, 2016 11:50:31 AM", 339 | "lastChange": "Feb 7, 2016 11:50:31 AM" 340 | } 341 | ] --------------------------------------------------------------------------------