1

次のマッピングで既にインデックスを作成した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私はフォローバックします

しかし、setFieldsdefaultOperatorANDにコメント解除した後、結果は表示されません。AND setFieldsdefaultOperatorORにコメント解除すると、説明に「フォロー」が含まれている結果のみが表示されます。

Q1: _all ではなく setFields で空白が機能しないのはなぜですか?

マッチクエリの使用中

$matchQuery = new \Elastica\Query\Match();
$matchfield = "user.description";
$queryToMatch = "follow back";

$matchQuery->setFieldQuery($matchfield, $queryToMatch); 

また、説明のみに「フォローバック」が含まれている 2 つの結果のみを示しています。しかし、一致フィールドを_allに変更した後、説明フィールドに「フォローバック」を含む多くの結果が表示されます

Q2. なぜそれが起こっているのですか?スペースで区切られた単語を検索するにはどうすればよいですか?

4

1 に答える 1

1

これは、上記のマッピングに従って「説明」フィールドを not_analyzed に設定したためです。

これにより、説明フィールドのペイロードがそのままインデックス化され、「説明」フィールドが正確な検索フレーズ (この場合は「フォローバック」) である場合に一致が発生します。

「index」=>「not_analyzed」を削除すると修正されます。

于 2014-07-24T14:00:11.967 に答える