AppEngineのSearch APIでは、一般的な単語が含まれる場合は適切に検索できません。例えば、「三井倉庫」で検索しようとした場合、「倉庫」を含むだけで検索結果に出現してしまいます。
この問題の対策としては、三井倉庫ではなく、”三井倉庫”で検索する必要があります。しかし、一般のユーザに、意識的に””を入力してもらうのは難しいのが現状です。
そこで、AppEngineのSearch APIに投げる前に、クエリを加工するのがよいと考えています。
上記コードでは、ORやANDやNOT、title:などの制御系クエリでない場合に、自動的に””を付加します。また、全角スペースを半角スペース(OR)に置換します。これで、普通のGoogle検索のように使うことができます。
この問題の対策としては、三井倉庫ではなく、”三井倉庫”で検索する必要があります。しかし、一般のユーザに、意識的に””を入力してもらうのは難しいのが現状です。
そこで、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検索のように使うことができます。
コメント
コメント一覧 (1)