10

I am trying to use Sphinx Search Engine with their Python API. The installation went fine. But when I use their Python API I do not get the complete result set. I only get the ID's? But when I use their ./search binary in ./bin I get the entire indexed content.

When using cpp ./search binary -

./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.

But when I use the Python API, I get -

>>> 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}

How do I get the string fields like 'title' or 'content' as part of the result set?

6
  • 2
    Query does not return the contents of the fulltext fields of each match. It only returns integer attributes and the document ids (in order). You will have to perform additional SQL query to retrieve the documents data. Commented Sep 11, 2010 at 21:03
  • @leoluk thanks for the response! If what you said is true then I would have to perform additional SQL queries to actually get my data. Is there any way I can get them from Sphinx itself? Since obviously it's index has the relevant text... Commented Sep 12, 2010 at 4:04
  • Yes, it is possible, but if I knew how I had made an answer out of it Commented Sep 13, 2010 at 15:36
  • Hi I run the same code but geting error please help me Commented Apr 18, 2017 at 8:21
  • stackoverflow.com/questions/43466220/… Commented Apr 18, 2017 at 8:22

2 Answers 2

10

Although it is possible to do, I don't think it's a good idea to store the "source" in sphinx. Sphinx is very fast for a dedicated search engine only (giving you just IDs and maybe ranking scores - if you need it).

Btw, Official SphinxSearch API is hardly updated, you can actually use MySQL driver/modul (e.g. pymysql). Following is an example:

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()  
Sign up to request clarification or add additional context in comments.

3 Comments

@taufikedys, I want to show highlighted text in search result, how can we do this using SQL query?
4

You could use sql_field_string - add to your config

source YOUR_SOURCE
{
sql_field_string = title
sql_field_string = content

it would index data of these fields and also store these fields as string attributes so you could get them in your result set without additional SQL query.

However as all attributes string attributes always loads into memory that is why you could run out of your box memory quickly.

4 Comments

This is mentioned in Sphinx common mistakes sphinxsearch.com/blog/2014/10/14/several-common-mystakes and it's mentioned to use the SHOW_META directive to see more information of what was matched.
I have run this query but did not get request. this stackoverflow.com/questions/43469933/…
@tmg_tt, I want to highlight the matched text in searched result, can we do this in only one step by using API?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.