在我已编入索引的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被评论时搜索时,它给了我很多结果,比如
如果您跟随ILL后退! :) 100%跟进! :)
跟着我,我跟着回来:) instagram:juliemar25我跟着回来了
但是,在将 setFields 和 defaultOperator 取消注释为 AND 之后,它将显示无结果。 通过取消注释 setFields 和 defaultOperator 到 OR ,它只显示“关注”的结果其他
Q1:为什么空格不能在setFields上工作而是使用_all?
使用匹配查询时
$matchQuery = new \Elastica\Query\Match();
$matchfield = "user.description";
$queryToMatch = "follow back";
$matchQuery->setFieldQuery($matchfield, $queryToMatch);
它仅显示两个仅在描述中“后退”的结果。但是在将字段更改为 _all 之后,它会在说明字段中显示包含“后退”的大量结果
Q2。为什么会这样?如何搜索空格分隔的单词?
答案 0 :(得分:1)
这是因为你已经设置了"描述"根据上面的映射不要分析字段。
这将导致描述字段有效负载按原样索引,并且当'描述'字段是一个精确的搜索短语,在这种情况下是"后面的"
删除"索引" => " not_analyzed"应该解决它。