Php 弹性搜索精确匹配域
我有一个名为Php 弹性搜索精确匹配域,php,
elasticsearch,Php,
elasticsearch,我有一个名为url的字段,当我对其进行索引时,该字段被设置为not\u analysisd: 'url' => [ 'type' => 'string', 'index' => 'not_analyzed' ] 以下是我确定索引中是否已存在URL的方法: public function urlExists($index, $type, $url) { $params = [ 'index' => $index, '
url
的字段,当我对其进行索引时,该字段被设置为not\u analysisd
:
'url' => [
'type' => 'string',
'index' => 'not_analyzed'
]
以下是我确定索引中是否已存在URL的方法:
public function urlExists($index, $type, $url) {
$params = [
'index' => $index,
'type' => $type,
'body' => [
'query' => [
'match' => [
'url' => $url
]
]
]
];
$results = $this->client->count($params);
return ($results['count'] > 0);
}
这似乎很好,但我不能100%确定这是找到精确匹配的正确方法,因为阅读文档另一种搜索方法是使用以下参数:
$params = [
'index' => $index,
'type' => $type,
'body' => [
'query' => [
'filtered' => [
'filter' => [
'term' => [
'url' => $url
]
]
]
]
]
];
我的问题是,对于未分析的
字段,两个参数的工作方式是否相同?第二个查询是正确的方法<代码>术语级查询/过滤器应用于精确匹配。最大的优势是<代码>Elasticsearch
用于此功能,您将在后续调用中获得更快的响应时间
从文件中
使用筛选器排除尽可能多的文档,然后仅查询
剩下的文件
另外,如果您观察输出,您会发现每个文档的\u分数
都是1,因为分数不应用于过滤器,高亮显示也是如此,但通过匹配查询,您将看到不同的\u分数
。再次从文件中
请记住,一旦将查询包装为筛选器,它将丢失查询
突出显示和评分等功能,因为它们不是功能
由过滤器支持
您的第一个查询使用match
,它基本上用于分析字段
,例如,当您希望Google和Google匹配包含Google的所有文档时(不区分大小写)将使用匹配查询
希望这有帮助