AppEngineのSearch APIでは、一般的な単語が含まれる場合は適切に検索できません。例えば、「三井倉庫」で検索しようとした場合、「倉庫」を含むだけで検索結果に出現してしまいます。

この問題の対策としては、三井倉庫ではなく、”三井倉庫”で検索する必要があります。しかし、一般のユーザに、意識的に””を入力してもらうのは難しいのが現状です。

そこで、AppEngineのSearch APIに投げる前に、クエリを加工するのがよいと考えています。

		query=query.replace(" "," ")
		query_list=query.split(" ")
		query_actual=""
		for one_query in query_list:
			if(one_query!="OR" and one_query!="AND" and one_query!="NOT"):
				if(not re.match(".*[ :><=\"].*",one_query)):
					one_query="\""+one_query+"\""
			if(query_actual!=""):
				query_actual+=" "
			query_actual+=one_query

		try:
			query=search.Query(
				query_string=query_actual,
				options=options,)
		except:
			return "query error"

上記コードでは、ORやANDやNOT、title:などの制御系クエリでない場合に、自動的に””を付加します。また、全角スペースを半角スペース(OR)に置換します。これで、普通のGoogle検索のように使うことができます。