elasticsearch 具有邻近度Solr距离搜索

bt1cpqcv  于 2023-05-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(197)

我试图做一些过滤的结果使用邻近搜索,我发现很难构造正确的查询这一点。
所以,在我的索引中,我有以下条目:

{
        "aff":"lg electronics",
        "shortuuid":"sddsd3ww",
        "name":"changhee kim",
        "id":"hjgjh-7678ghjhjhj-fdsfdg",
        "_version_":1764697833293742080},

我尝试了一个名字的小变化:

import requests

name="changhee kim a"
org="lg electronics"

requests.get('http://localhost:8983/solr/searcher/select', params={
'q': f'"{name}"~10 AND "{org}"~1',
'wt': 'json',
'rows': 1,
'start': 0,
}).json()

而且它返回0个结果!为什么?我会想,既然查询词是两个词,包括空格,它应该捕捉到这一点,并显示给我上面的结果条目。

  • 编辑 *

@Eric的回答:

import requests

name="changhee kim a" # a space and a added at end
org="lg electronics"

requests.get('http://localhost:8983/solr/searcher/select', params={
'q': f'name:{name}~10 AND aff:{org}~1',
'wt': 'json',
'rows': 1,
'start': 0,
}).json()

我没有得到上述查询的匹配结果。
但是,当我在字符串之间进行编辑时:

import requests

name="changh kim" #deleted two `e` in changhee
org="lg electronics"

requests.get('http://localhost:8983/solr/searcher/select', params={
'q': f'name:{name}~10 AND aff:{org}~1',
'wt': 'json',
'rows': 1,
'start': 0,
}).json()

给出了正确的预期结果
此外,在查询的末尾添加字符也可以正常工作:

import requests

name="changhee kima" #added `a` to `kim`
org="lg electronics"

requests.get('http://localhost:8983/solr/searcher/select', params={
'q': f'name:{name}~10 AND aff:{org}~1',
'wt': 'json',
'rows': 1,
'start': 0,
}).json()

所以当在结尾加上一个词时,似乎不起作用:

name="changhee kim a" #added aditional `a` at the end
org="lg electronics"

为什么呢?

svmlkihl

svmlkihl1#

邻近搜索查询是一个短语查询(双引号),允许术语移动匹配指定的短语,即。它在同一字段中寻找彼此在特定距离内的术语。
您要做的是对两个不同的字段进行模糊搜索(删除双引号并指定相关字段):

q = f'name:{name}~10 AND aff:{org}~1'

注意。你需要避免空格,即。name = 'changhee\ kim\ a,这样solr就知道编辑距离应用于整个搜索的字符串,只有当涉及的字段没有标记化(“string”fieldtype)或使用将整个输入流视为单个标记的标记器(Keyword Tokenizer)时才有效。

相关问题