├── .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 | ]
--------------------------------------------------------------------------------