我试图做一些过滤的结果使用邻近搜索,我发现很难构造正确的查询这一点。
所以,在我的索引中,我有以下条目:
{
"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"
为什么呢?
1条答案
按热度按时间svmlkihl1#
邻近搜索查询是一个短语查询(双引号),允许术语移动匹配指定的短语,即。它在同一字段中寻找彼此在特定距离内的术语。
您要做的是对两个不同的字段进行模糊搜索(删除双引号并指定相关字段):
注意。你需要避免空格,即。
name = 'changhee\ kim\ a
,这样solr就知道编辑距离应用于整个搜索的字符串,只有当涉及的字段没有标记化(“string”fieldtype)或使用将整个输入流视为单个标记的标记器(Keyword Tokenizer)时才有效。