From c4b516a28cbc2c5e602a326b3e73ad7cea03d01f Mon Sep 17 00:00:00 2001 From: Jack Stdin Date: Sun, 21 Feb 2016 01:08:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D1=83=20(=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D1=83=D1=8E=20=D1=84=D0=BE=D1=80=D0=BC=D1=83)=20=D0=B8?= =?UTF-8?q?=20=D1=81=D0=BE=D0=BA=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?.=20=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20Readme=20=D1=81=20=D1=83=D1=87=D0=B5=D1=82=D0=BE=D0=BC?= =?UTF-8?q?=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D1=80=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 +++++++++++-------- aore/fias/search.py | 4 ++-- aore/templates/postgre/sphinx_query.sql | 8 +++++--- aore/templates/sphinx/idx_addrobj.conf | 2 +- aore/templates/sphinx/sphinx.conf | 6 ++++-- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 7de6737..284eaea 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,12 @@ Python application that can operate with FIAS (Russian Address Object DB) ### Зависимости -_Внимание_! Только Python 2.7, только PostgreSQL, только Sphinx. Python 3, MySQL/MariaDB, Lucene/Solr не -поддерживаются и не будут. +_Внимание_! Только Python 2.7+ (на 3+ не тестировал), только PostgreSQL, только Sphinx. MySQL/MariaDB, ElasticSearch/Solr +не поддерживаются и, скорее всего, не будут. -Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и 4.5Gb места на диске -(3-3.5Gb для скачивания архива с базой и 300-400Mb для индексов Sphinx). Также необходимы root права -(Администратора, для OS Windows), для работы searchd и предварительной установки. +Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и ~5.5Gb места на диске +(3-3.5Gb для скачивания архива с базой, 350-400Mb для индексов Sphinx, 1Gb для базы). Также необходимы root права +(администратора, для Windows), для работы searchd и предварительной установки. Рекомендую устанавливать или на отдельном сервере, или на своей машине, либо же на VPS. На shared хостинге работоспособность не гарантируется (только если хостер Вам сам все установит и настроит, и разрешит запуск демонов - читай: "невозможно") @@ -83,7 +83,7 @@ _Внимание_! Только Python 2.7, только PostgreSQL, тольк 4. Web-сервер с поддержкой WSGI, любой, по Вашему желанию. ### Windows -1. Установить lxml, через pip не ставится, так что качаем [отсюда](https://pypi.python.org/pypi/lxml/3.5.0). +1. Установить lxml, скачав [отсюда](https://pypi.python.org/pypi/lxml/3.5.0). 2. Установить unrar.exe (можно установить WinRar целиком). 3. Установить sphinxapi последней версии (либо взять из директории Sphinx): @@ -147,6 +147,9 @@ _Внимание_! Только Python 2.7, только PostgreSQL, тольк - Windows: `python manage.py -c -i C://sphinx//indexer.exe -o C://sphinx//sphinx.conf` - Debian: `sudo python manage.py -c -i indexer -o /usr/local/sphinx/etc/sphinx.conf` 4. Затем запустим searchd: - - Windows: `net start sphinxsearch`, при этом файл настройки должен быть доступен Sphinx'у. + - Windows: + - Устанавливаем службу: `C:\Sphinx\bin\searchd --install --config C:\Sphinx\sphinx.conf.in --servicename sphinxsearch` + - и запускаем: `net start sphinxsearch` - Debian: `sudo searchd --config /usr/local/sphinx/etc/sphinx.conf` -5. Настроим WSGI server, я использую nginx + passenger, Вы можете использовать любое приемлемое сочетание. \ No newline at end of file +5. Настроим WSGI server, я использую nginx + passenger (см. файл passenger_wsgi.py). Вы можете использовать любое +приемлемое сочетание. \ No newline at end of file diff --git a/aore/fias/search.py b/aore/fias/search.py index 1b96347..1be8070 100644 --- a/aore/fias/search.py +++ b/aore/fias/search.py @@ -125,14 +125,14 @@ class SphinxSearch: # формируем строки для поиска в Сфинксе for i in range(good_vars_word_count, max(0, good_vars_word_count - 3), -1): - first_q = "\"{}\"/{}".format(" ".join(good_var.text for good_var in good_vars), i) + first_q = "@fullname \"{}\"/{}".format(" ".join(good_var.text for good_var in good_vars), i) if self.search_freq_words: for j in range(freq_vars_word_count, -1, -1): if j == 0: second_q = "" else: - second_q = " \"{}\"/{}".format(" ".join(freq_var.text for freq_var in freq_vars), j) + second_q = " @sname \"{}\"/{}".format(" ".join(freq_var.text for freq_var in freq_vars), j) second_q = second_q.replace("*", "") print first_q + second_q diff --git a/aore/templates/postgre/sphinx_query.sql b/aore/templates/postgre/sphinx_query.sql index 00b0780..fdfb931 100644 --- a/aore/templates/postgre/sphinx_query.sql +++ b/aore/templates/postgre/sphinx_query.sql @@ -1,14 +1,16 @@ WITH RECURSIVE PATH (cnt, aoid, aoguid, aolevel, fullname) AS ( SELECT ao.id as cnt, ao.aoid, ao.aoguid, ao.aolevel, - ao.shortname || ' ' || ao.formalname AS fullname + ao.shortname || ' ' || ao.formalname AS fullname, + ao.shortname || '' AS sname FROM "ADDROBJ" AS ao WHERE aolevel = 1 AND actstatus = TRUE AND livestatus = TRUE AND nextid IS NULL UNION SELECT child.id as cnt, child.aoid, child.aoguid, child.aolevel, - PATH.fullname || ', ' || child.shortname || ' ' || child.formalname AS fullname + PATH.fullname || ', ' || child.shortname || ' ' || child.formalname AS fullname, + PATH.sname || ' ' || child.shortname AS sname FROM "ADDROBJ" AS child , PATH WHERE child.parentguid = PATH.aoguid AND actstatus = TRUE AND livestatus = TRUE AND nextid IS NULL ) - SELECT p.cnt, p.aoid, p.fullname, length(p.fullname)-length(replace(p.fullname, ' ', '')) as wordcount FROM PATH p WHERE p.AOLEVEL NOT IN (1, 3) \ No newline at end of file + SELECT p.cnt, p.aoid, p.fullname, p.sname, length(p.fullname)-length(replace(p.fullname, ' ', '')) as wordcount FROM PATH p WHERE p.AOLEVEL NOT IN (1, 3) \ No newline at end of file diff --git a/aore/templates/sphinx/idx_addrobj.conf b/aore/templates/sphinx/idx_addrobj.conf index 431122e..04ba7f0 100644 --- a/aore/templates/sphinx/idx_addrobj.conf +++ b/aore/templates/sphinx/idx_addrobj.conf @@ -10,9 +10,9 @@ source {{index_name}} sql_query = {{!sql_query}} sql_field_string = fullname + sql_field_string = sname sql_attr_uint = wordcount sql_attr_string = aoid - sql_attr_string = aoguid } index {{ index_name }} diff --git a/aore/templates/sphinx/sphinx.conf b/aore/templates/sphinx/sphinx.conf index f193aaf..8794e3b 100644 --- a/aore/templates/sphinx/sphinx.conf +++ b/aore/templates/sphinx/sphinx.conf @@ -33,11 +33,11 @@ searchd # client read timeout, seconds # optional, default is 5 - read_timeout = 5 + read_timeout = 7 # maximum amount of children to fork (concurrent searches to run) # optional, default is 0 (unlimited) - max_children = 30 + max_children = 4 # PID file, searchd process ID file name # mandatory @@ -59,5 +59,7 @@ searchd # whether to unlink .old index copies on succesful rotation. # optional, default is 1 (do unlink) unlink_old = 1 + + expansion_limit = 48 }