次のマッピングで既にインデックスを作成したTwitterユーザーの説明フィールドで「フォローバック」を検索します。
注: マッピングの一部のみを強調表示します。
1.
'analysis' => array(
'analyzer' => array(
'myanalyzer' => array(
"type" => "standard",
'stopwords' => '_none_',
),
)
)
2.
$mapping->setParam('index_analyzer', 'myanalyzer');
$mapping->setParam('search_analyzer', 'myanalyzer');
3.
'description' => array('type' => 'string', "index" => "not_analyzed"),
4.
//search something
$queryString = new \Elastica\Query\QueryString();
$queryString->setDefaultOperator( "AND" );
// $queryString->setFields(array("user.description"));
$queryString->setQuery('follow back');
setFields がコメントされている間に検索すると、次のような多くの結果が得られます
あなたがフォローするなら、フォローバックしてください!:) 100%フォローバック!:)
私に従ってください私はフォローバックします:) instagram:juliemar25私はフォローバックします
しかし、setFieldsとdefaultOperatorをANDにコメント解除した後、結果は表示されません。AND setFieldsとdefaultOperatorをORにコメント解除すると、説明に「フォロー」が含まれている結果のみが表示されます。
Q1: _all ではなく setFields で空白が機能しないのはなぜですか?
マッチクエリの使用中
$matchQuery = new \Elastica\Query\Match();
$matchfield = "user.description";
$queryToMatch = "follow back";
$matchQuery->setFieldQuery($matchfield, $queryToMatch);
また、説明のみに「フォローバック」が含まれている 2 つの結果のみを示しています。しかし、一致フィールドを_allに変更した後、説明フィールドに「フォローバック」を含む多くの結果が表示されます
Q2. なぜそれが起こっているのですか?スペースで区切られた単語を検索するにはどうすればよいですか?