Поправлено индексирование Sphinx
This commit is contained in:
parent
0bd79b1311
commit
77f122ecd3
14
README.md
14
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`
|
||||
|
@ -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):
|
||||
|
@ -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");
|
||||
|
@ -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)
|
Loading…
x
Reference in New Issue
Block a user