i am using the Google App Engine Search API (https://developers.google.com/appengine/docs/python/search/). I have indexed all of the entities and the search is working fine. but only if i search for the exact matches else it returns 0 results. For Example:
from google.appengine.api import search
_INDEX_NAME = 'searchall'
query_string ="United Kingdom"
query = search.Query(query_string=query_string)
index = search.Index(name=_INDEX_NAME)
print index.search(query)
if i run the following script i do get results as follows :
search.SearchResults(results='[search.ScoredDocument(doc_id='c475fd24-34ba-42bd-a3b5-d9a48d880012', fields='[search.TextField(name='name', value='United Kingdom')]', language='en', order_id='45395666'), search.ScoredDocument(doc_id='5fa757d1-05bf-4012-93ff-79dd4b77a878', fields='[search.TextField(name='name', value='United Kingdom')]', language='en', order_id='45395201')]', number_found='2')
but if i change the query_string
to "United Kin"
or "United"
it return 0 results as follows:
search.SearchResults(number_found='0')
I want to use this API for both normal search and AutoSuggest. What would be the best way to achieve this ?
App Engine's full text search API does not support substring matching.
However, I needed this behavior myself to support search suggestions as the user types. Here is my solution for that:
""" Takes a sentence and returns the set of all possible prefixes for each word.
For instance "hello world" becomes "h he hel hell hello w wo wor worl world" """
def build_suggestions(str):
suggestions = []
for word in str.split():
prefix = ""
for letter in word:
prefix += letter
suggestions.append(prefix)
return ' '.join(suggestions)
# Example use
document = search.Document(
fields=[search.TextField(name='name', value=object_name),
search.TextField(name='suggest', value=build_suggestions(object_name))])
The basic idea is to manually generate separate keywords for every possible substring. This is only practical for short sentences, but it works great for my purposes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With