Поправлено индексирование Sphinx
This commit is contained in:
parent
0bd79b1311
commit
77f122ecd3
14
README.md
14
README.md
@ -1,5 +1,5 @@
|
|||||||
# py-fias
|
# 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
|
Простое приложение для работы с БД ФИАС, написано для Python 2.7
|
||||||
|
|
||||||
@ -10,19 +10,21 @@ WSGI application they can serve FIAS (Russian Address Object DB)
|
|||||||
|
|
||||||
Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и 4.5Gb места на диске
|
Для работы приложения необходимо достаточное кол-во RAM (1Gb+) и 4.5Gb места на диске
|
||||||
(3-3.5Gb для скачивания архива с базой и 300-400Mb для индексов Sphinx). Также необходимы root права
|
(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/)
|
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
|
(`sudo apt-get install python2.7 python2.7-dev`), pip
|
||||||
|
2. PostgreSql 9.5 и выше (из-за синтаксиса _ON CONFLICT ... DO_)
|
||||||
2. PostgreSql 9.5 и выше (из-за _ON CONFLICT_)
|
|
||||||
|
|
||||||
3. Sphinx 2.2.3 и новее (из-за синтаксиса _MAYBE_)
|
3. Sphinx 2.2.3 и новее (из-за синтаксиса _MAYBE_)
|
||||||
|
|
||||||
### Windows
|
### 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`
|
`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']))
|
logging.info("Place suggestion dict to DB {}...".format(self.files['dict.txt']))
|
||||||
dict_dat_fname = os.path.abspath(trashfolder + "suggdict.csv")
|
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:
|
with open(self.files['dict.txt'], "r") as dict_file, open(dict_dat_fname, "w") as exit_file:
|
||||||
line = None
|
line = None
|
||||||
while line != '':
|
while line != '':
|
||||||
@ -80,7 +81,7 @@ class SphinxHelper:
|
|||||||
line = dict_file.readline()
|
line = dict_file.readline()
|
||||||
if line == '':
|
if line == '':
|
||||||
break
|
break
|
||||||
|
csv_counter += 1
|
||||||
splitting_seq = line.split(' ')
|
splitting_seq = line.split(' ')
|
||||||
keyword = splitting_seq[0]
|
keyword = splitting_seq[0]
|
||||||
freq = splitting_seq[1].rstrip('\n')
|
freq = splitting_seq[1].rstrip('\n')
|
||||||
@ -92,9 +93,14 @@ class SphinxHelper:
|
|||||||
nodes.append(freq)
|
nodes.append(freq)
|
||||||
|
|
||||||
exit_file.write("\t".join(nodes) + "\n")
|
exit_file.write("\t".join(nodes) + "\n")
|
||||||
|
try:
|
||||||
|
dict_file.close()
|
||||||
|
exit_file.close()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
aodp = DbHandler()
|
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.")
|
logging.info("Done.")
|
||||||
|
|
||||||
def __create_ao_index_config(self):
|
def __create_ao_index_config(self):
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
CREATE INDEX "sphinx_ind_aolevel" ON "ADDROBJ" USING btree ("aolevel");
|
CREATE INDEX "sphinx_ind_aolevel" ON "ADDROBJ" USING btree ("aolevel");
|
||||||
CREATE INDEX "sphinx_ind_parentguid" ON "ADDROBJ" USING btree ("parentguid");
|
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 "sphinx_ind_aoguid" ON "ADDROBJ" USING btree ("aoguid");
|
||||||
CREATE INDEX "SOCRBASE_scname_idx" ON "SOCRBASE" USING btree ("scname");
|
CREATE INDEX "SOCRBASE_scname_idx" ON "SOCRBASE" USING btree ("scname");
|
||||||
CREATE INDEX "SOCRBASE_socrname_idx" ON "SOCRBASE" USING btree ("socrname");
|
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,
|
SELECT ao.id as cnt, ao.aoid, ao.aoguid, ao.aolevel,
|
||||||
ao.shortname || ' ' || ao.formalname AS fullname
|
ao.shortname || ' ' || ao.formalname AS fullname
|
||||||
FROM "ADDROBJ" AS ao
|
FROM "ADDROBJ" AS ao
|
||||||
WHERE aolevel = 1 AND livestatus = TRUE
|
WHERE aolevel = 1 AND actstatus = TRUE AND livestatus = TRUE AND nextid IS NULL
|
||||||
UNION
|
UNION
|
||||||
SELECT child.id as cnt, child.aoid, child.aoguid, child.aolevel,
|
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
|
||||||
FROM "ADDROBJ" AS child
|
FROM "ADDROBJ" AS child
|
||||||
, PATH
|
, 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)
|
SELECT * FROM PATH WHERE AOLEVEL NOT IN (1,3)
|
Loading…
x
Reference in New Issue
Block a user