2017-07-10 4 views
0

以下のようなSolrクエリを実行すると、それがわかりました。ExtendedDismaxQParserのSolrがキーワードANDおよびORを疑問符に変換するのはなぜですか?

q:+fruit +"apple and banana"

ExtendedDismaxQParserは以下に変換されます。 (私はデバッグ出力にparsedqueryするクエリ文字列から行くときの変換を見ることができたdebugQueryフラグを使用する。)

+fruit +"apple ? banana"

これは明らかに、間に任意の単語と単語のリンゴとバナナと一致するようにクエリを変更しますそれら。クエリのフレーズに期待される動作ではありません。

この動作をオフにする方法はありますか?フレーズ内のANDとORを尊重しますか?

以下はJSONデバッグ出力のサニタイズバージョンです。

"rawquerystring":"+(field1:\"apple and health\"^1 field2:\"apple and banana\"^5 field3:\"apple and banana\"^1)", "querystring":"+(field1:\"apple and banana\"^1 field2:\"apple and banana\"^5 field3:\"apple and banana\"^1)", "parsedquery":"(+(PhraseQuery(field1:\"apple ? banana\") PhraseQuery(field2:\"apple ? banana\"^5.0) PhraseQuery(field3:\"apple ? banana\")) (field2:[* TO *]^10.0 hasdescription:y^10.0) FunctionQuery((200.0/(2.0*float(div(ms(const(1499700124562),date(displaydate)),const(84000000)))+20.0))^7.0) FunctionQuery((float(erpm))^0.0) FunctionQuery((200.0/(2.0*float(geodist(latlon(latlong),39.8027,-86.1557))+20.0))^10.0))/no_coord", "parsedquery_toString":"+(field1:\"apple ? banana\" field2:\"apple ? banana\"^5.0 field3:\"apple ? banana\") (field2:[* TO *]^10.0 hasdescription:y^10.0) (200.0/(2.0*float(div(ms(const(1499700124562),date(displaydate)),const(84000000)))+20.0))^7.0 (float(erpm))^0.0 (200.0/(2.0*float(geodist(latlon(latlong),39.8027,-86.1557))+20.0))^10.0", "QParser":"ExtendedDismaxQParser",

+0

使用しているクエリを追加してください。 –

+0

@SanjayDutt私は、Solrからのサニタイズされたデバッグ出力を追加しました。 –

答えて

1

Edismaxはこれとは何の関係もありません。管理されたスキーマでは、StopFilterFactoryフィルタを設定し、stopwords.txtには、またはという単語が含まれている必要があります。
このフィルタのために、solrはこれらの単語のインデックスを作成せず、後で照会することはできません。しかし、ソルは言葉の位置を保持します。
「りんごとバナナ」を検索している場合は、今の場合です。フィルタはを疑問符に置き換えます。これにより、あなたのフレーズ内の単語はsolrの内容と一致するようになります。

+0

ありがとうございました。それはまさに私が理解しようとしていたものです。単語 "and"は実際にはストップワードです。 –

関連する問題