假设我已经使用PHP插入了以下文档(请注意“ó”。)
$dbs->insert(array('name' => 'televisión'));
在mongodb中,数据库服务器保存如下
{ "name" : "televisi��n" }
如果我按如下方式调用findOne方法,(注意ó)
$doc = $dbs->findOne(array('name' => "televisión"));
它返回正确的值
[name] => televisión
直到这里一切都很好。
所以,想象一下,从php我需要确定文件televisión进入mongodb数据库,但是我从没有重音“ó”的URL中获取值,即电视,所以。
$doc = $dbs->findOne(array('name' => "television"));
findOne方法返回null,因此不匹配文档。
有没有办法让这个不返回空值,并且无论重音如何都可以找到文件?
提前致谢!
答案 0 :(得分:1)
在mongodb中,数据库服务器保存如下
{“name”:“televisi n”}
这可能是因为你的shell没有正确显示UTF-8。
至于:
有没有办法让这个不返回空值,并且无论重音如何都可以找到文件?
您可以使用新的文本搜索功能执行此操作:
<?php
$m = new MongoClient;
$d = $m->test;
$c = $d->so;
// Just dropping here to create a controlled output - no need to do this yourself.
$c->drop();
$c->ensureIndex(
array( 'name' => 'text' ),
array( 'default_language' => 'spanish' )
);
$c->insert( array('name' => 'televisión' ) );
$res = $d->command( array( 'text' => 'so', 'search' => 'television' ) );
var_dump( $res['results'] );
?>
哪个输出:
array(1) {
[0] =>
array(2) {
'score' =>
double(1)
'obj' =>
array(2) {
'_id' =>
class MongoId#6 (1) {
...
}
'name' =>
string(11) "televisión"
}
}
}
要使文本搜索生效,您需要使用MongoDB 2.4.x,并且需要使用--setParameter textSearchEnabled=true
标记专门启用它mongod
或添加到您的代码中:
$d->command( array( 'setParameter' => 1, 'textSearchEnabled' => true ) );