1

我正在使用 ElasticSearch 进行一些测试,我发现它不会返回非常常见的术语的结果。我认为这可能是因为它超时、内存不足或其他相关,但我很困惑为什么我没有收到任何类型的错误反馈。

这是代码片段:

// client & index ----------------------------------------------
$eC = new Elastica_Client();
$eI = $eC->getIndex('test_index');


// query string ---------------------------------------
$eQqs = new Elastica_Query_QueryString();
$eQqs->setDefaultOperator('AND');
$eQqs->setQuery('the'); ### <--- example of a common keyword,
// --- note that if I were to use something less common like "zoo"
// that it would return an expected result set


// search object --------------------------------------
$eQ = new Elastica_Query();
$eQ->setQuery( $eQqs );
$eQ->setFrom(1);
$eQ->setLimit(3);


// get result set -------------------------------------
$eRS = $eI->search( $eQ );


// output results ----------------------------------------
echo "total time: " . $eRS->getTotalTime() . "\n";
echo "total results: " . $eRS->getTotalHits() . "\n\n";

foreach( $eRS->getResults() as $result ) {
    print_r( $result->getData() );
}

正如评论中提到的,如果我搜索一个不太常见的字符串,那么它工作正常,我会得到这样的东西:

total time: 292
total results: 21

Array
(
    [id] => 1234
    [name] => A day at the Zoo
...

但是,如果我搜索一些非常常见的东西,比如“the”,我不会从 中得到任何东西$eRS->getResults(),而是得到这个:

total time: 2
total results: 0

请注意,我已经确认索引中确实有许多“the”实例。这里发生了什么?我做错了吗?如果不是,我怎样才能让它吐出一些有意义的错误而不是这个明显意外的结果集?

4

1 回答 1

2

常用词如“a”、“an”、“and”、“are”、“as”、“at”、“be”、“but”、“by”、“for”、“if”、“in” ,“进入”,“是”,“它”,“否”,“不是”,“的”,“在”,“或”,“这样”,“那个”,“该”,“他们的”,“ then”、“there”、“these”、“they”、“this”、“to”、“was”、“will”、“with”是所谓的停用词。这些词很常见,通常认为它们不会为全文搜索增加价值。因此,默认情况下,它们在搜索期间不会被索引和忽略。

于 2012-12-04T23:26:24.103 回答