Поправлено индексирование Sphinx

This commit is contained in:
Jack Stdin 2016-01-17 21:36:59 +03:00
parent 0bd79b1311
commit 77f122ecd3
4 changed files with 19 additions and 11 deletions

View File

@ -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`

View File

@ -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):

View File

@ -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");

View File

@ -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)