diff --git a/README.md b/README.md index b0596aa..a5d25c0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # py-fias -WSGI application they can serve FIAS (Russian Address Object DB) +Python application that can operate with FIAS (Russian Address Object DB) Простое приложение для работы с БД ФИАС, написано для Python 2.7 @@ -10,19 +10,21 @@ WSGI application they can serve FIAS (Russian Address Object DB) Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и 4.5Gb места на диске (3-3.5Gb для скачивания архива с базой и 300-400Mb для индексов Sphinx). Также необходимы root права -(или Администратора, для OS Windows), для работы демона Sphinx и предварительной установки. +(Администратора, для OS Windows), для работы searchd и предварительной установки. +Рекомендую устанавливать или на отдельном сервере, или на своей машине, либо же на VPS. +На shared хостинге работоспособность не гарантируется (только если хостер Вам сам все установит и настроит, +и разрешит запуск демонов - читай: "невозможно") Предварительно нужно установить и настроить: 1. Python 2.7 [Windows](https://www.python.org/downloads/windows/), [Debian](https://www.python.org/downloads/source/) (`sudo apt-get install python2.7 python2.7-dev`), pip - -2. PostgreSql 9.5 и выше (из-за _ON CONFLICT_) - +2. PostgreSql 9.5 и выше (из-за синтаксиса _ON CONFLICT ... DO_) 3. Sphinx 2.2.3 и новее (из-за синтаксиса _MAYBE_) ### Windows -1. Установить sphinxapi последней версии: +1. Установить lxml, через pip не ставится, так что качаем [отсюда](https://pypi.python.org/pypi/lxml/3.5.0). +2. Установить sphinxapi последней версии: `python -m pip install https://github.com/Romamo/sphinxapi/zipball/master` \ No newline at end of file diff --git a/aore/miscutils/sphinx.py b/aore/miscutils/sphinx.py index f511660..3af57a2 100644 --- a/aore/miscutils/sphinx.py +++ b/aore/miscutils/sphinx.py @@ -73,6 +73,7 @@ class SphinxHelper: logging.info("Place suggestion dict to DB {}...".format(self.files['dict.txt'])) dict_dat_fname = os.path.abspath(trashfolder + "suggdict.csv") + csv_counter = 0 with open(self.files['dict.txt'], "r") as dict_file, open(dict_dat_fname, "w") as exit_file: line = None while line != '': @@ -80,7 +81,7 @@ class SphinxHelper: line = dict_file.readline() if line == '': break - + csv_counter += 1 splitting_seq = line.split(' ') keyword = splitting_seq[0] freq = splitting_seq[1].rstrip('\n') @@ -92,9 +93,14 @@ class SphinxHelper: nodes.append(freq) exit_file.write("\t".join(nodes) + "\n") + try: + dict_file.close() + exit_file.close() + except: + pass aodp = DbHandler() - aodp.bulk_csv(AoXmlTableEntry.OperationType.update, "AOTRIG", 8, dict_dat_fname) + aodp.bulk_csv(AoXmlTableEntry.OperationType.update, "AOTRIG", csv_counter, dict_dat_fname) logging.info("Done.") def __create_ao_index_config(self): diff --git a/aore/templates/postgre/post_create.sql b/aore/templates/postgre/post_create.sql index e1ee136..0ea6c7f 100644 --- a/aore/templates/postgre/post_create.sql +++ b/aore/templates/postgre/post_create.sql @@ -1,6 +1,6 @@ CREATE INDEX "sphinx_ind_aolevel" ON "ADDROBJ" USING btree ("aolevel"); CREATE INDEX "sphinx_ind_parentguid" ON "ADDROBJ" USING btree ("parentguid"); -CREATE INDEX "sphinx_ind_livestatus" ON "ADDROBJ" USING btree ("livestatus"); +CREATE INDEX "sphinx_ind_livestatus" ON "ADDROBJ" USING btree ("actstatus", "livestatus", "nextid"); CREATE INDEX "sphinx_ind_aoguid" ON "ADDROBJ" USING btree ("aoguid"); CREATE INDEX "SOCRBASE_scname_idx" ON "SOCRBASE" USING btree ("scname"); CREATE INDEX "SOCRBASE_socrname_idx" ON "SOCRBASE" USING btree ("socrname"); diff --git a/aore/templates/postgre/sphinx_query.sql b/aore/templates/postgre/sphinx_query.sql index cf22267..7d961af 100644 --- a/aore/templates/postgre/sphinx_query.sql +++ b/aore/templates/postgre/sphinx_query.sql @@ -3,12 +3,12 @@ SELECT ao.id as cnt, ao.aoid, ao.aoguid, ao.aolevel, ao.shortname || ' ' || ao.formalname AS fullname FROM "ADDROBJ" AS ao - WHERE aolevel = 1 AND livestatus = TRUE + 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 FROM "ADDROBJ" AS child , PATH - WHERE child.parentguid = PATH.aoguid AND livestatus = TRUE + WHERE child.parentguid = PATH.aoguid AND actstatus = TRUE AND livestatus = TRUE AND nextid IS NULL ) SELECT * FROM PATH WHERE AOLEVEL NOT IN (1,3) \ No newline at end of file