2010-09-11 15 views
8

Próbuję użyć wyszukiwarki Sphinx z ich API Pythona. Instalacja poszła dobrze. Ale kiedy używam ich API Pythona, nie otrzymuję kompletnego zestawu wyników. Dostaję tylko identyfikatory? Ale kiedy używam ich binariów ./search w ./bin, otrzymuję całą zindeksowaną treść.Aparat wyszukiwania i Python API

Podczas korzystania CPP ./search binarny -

./search test 

1. document=1, weight=1, group_id=1, date_added=Sat Sep 11 07:42:38 2010, title=2 
    id=1 
    group_id=1 
    group_id2=5 
    date_added=2010-09-11 07:42:38 
    title=test one 
    content=this is my test document number one. also checking search within phrases. 

Ale kiedy używać API Pythona, otrzymuję -

>>> import sphinxapi 
>>> client = sphinxapi.SphinxClient() 
>>> client.SetServer('127.0.0.1', 9312) 
>>> client.Query('test') 
{'status': 0, 'matches': [{'id': 1, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 1, 'title': 2}}, {'id': 2, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 1, 'title': 3}}, {'id': 4, 'weight': 1, 'attrs': {'date_added': 1284171158, 'group_id': 2, 'title': 1}}], 'fields': ['content'], 'time': '0.022', 'total_found': 3, 'warning': '', 'attrs': [['group_id', 1], ['date_added', 2], ['title', 3]], 'words': [{'docs': 6, 'hits': 6, 'word': 'test'}], 'error': '', 'total': 3} 

Jak uzyskać pola ciąg jak 'tytuł' lub ' treść "jako część zestawu wyników?

+2

'Zapytanie' nie zwraca zawartości pól pełnotekstowych z każdego meczu. Zwraca tylko liczby całkowite i identyfikatory dokumentów (w kolejności). Będziesz musiał wykonać dodatkowe zapytanie SQL, aby pobrać dane z dokumentów. – leoluk

+0

@leoluk dzięki za odpowiedź! Jeśli to, co powiedziałeś, jest prawdą, musiałbym wykonać dodatkowe zapytania SQL, aby uzyskać moje dane. Czy istnieje sposób, w jaki mogę je zdobyć od samego Sphinx? Ponieważ oczywiście jest to indeks ma odpowiedni tekst ... –

+0

Tak, jest to możliwe, ale gdybym wiedział, w jaki sposób udzieliłem na nie odpowiedzi – leoluk

Odpowiedz

4

Można użyć sql_field_string - dodać do config

source YOUR_SOURCE 
{ 
sql_field_string = title 
sql_field_string = content 

prawda dane indeksowe tych dziedzinach, a także przechowywać te pola jako atrybuty ciąg więc można dostać je w zestaw wyników bez dodatkowego zapytania SQL.

Jednak wszystkie atrybuty łańcuchów atrybutów zawsze ładują się do pamięci, dlatego można szybko uruchomić pamięć skrzynki.

+0

Jest to wspomniane w Sphinx Common błędy http://sphinxsearch.com/blog/2014/10/14/several-common-mystakes/ i wspomniano o używaniu dyrektywy SHOW_META, aby zobaczyć więcej informacji o tym, co zostało dopasowane. – stommepoes

+0

@ tmg_tt http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python please ans this – Sandeep

+0

Uruchomiłem to zapytanie, ale nie otrzymałem żądania. ten http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –

5

Mimo że jest to możliwe, nie sądzę, że dobrym pomysłem jest przechowywanie "źródła" w sfinksie. Sphinx jest bardzo szybki tylko dla dedykowanej wyszukiwarki (daje tylko identyfikatory, a może wyniki rankingowe - jeśli tego potrzebujesz).

Btw, oficjalny interfejs API SphinxSearch jest prawie nieaktualny, w rzeczywistości można użyć sterownika/modul MySQL (np. Pymysql). Oto przykład:

import pymysql 
db = pymysql.connect(host='127.0.0.1',port=9301,user='',passwd='',charset='utf8',db='') 
cur = db.cursor() 
qry='SELECT id,weight() FROM idx_name WHERE MATCH(\'"your Query"/1\') LIMIT 10 OPTION ranker=SPH04' 
cur.execute(qry);row = cur.fetchall() 
print(row) 
cur.close();db.close() 
+0

http://stackoverflow.com/questions/43467783/sphinx-search-assertionerror-error-python – Sandeep

+0

http://stackoverflow.com/questions/43469933/sphinx-search-not-working-with-python –