我正在尝试对某些文档的某个字段进行全文搜索,并且正在寻找您的建议。我首先尝试执行此类请求:
GET http://localhost:8080/search/?query=lord+of+the+rings
但它向我返回了字段完全匹配且不包含除给定字符串之外的其他信息的文档,因此我尝试了 YQL 中的等效项:
GET http://localhost:8080/search/?yql=SELECT * FROM site WHERE text CONTAINS "lord of the rings";
我得到了完全相同的结果。但是,当我进一步阅读文档时,我发现了 MATCHES 指令,它确实给了我我正在寻找的结果,通过这种请求:
GET http://localhost:8080/search/?yql=SELECT * FROM site WHERE text MATCHES "lord of the rings";
虽然我不知道为什么,但对于这种类型的一些请求,我遇到了这种类型的超时错误:
{
"root": {
"id": "toplevel",
"relevance": 1,
"fields": {
"totalCount": 0
},
"errors": [
{
"code": 12,
"summary": "Timed out",
"source": "site",
"message": "Timeout while waiting for sc0.num0"
}
]
}
}
所以我通过添加大于默认超时值来解决这个问题:
GET http://localhost:8080/search/?yql=SELECT * FROM site WHERE text MATCHES "lord of the rings";&timeout=20000
我的问题是,我是否以正确的方式进行全文搜索,我该如何改进它?
编辑:这是相应的搜索定义:
search site {
document site {
field text type string {
stemming: none
normalizing: none
indexing: attribute
}
field title type string {
stemming: none
normalizing: none
indexing: attribute
}
}
fieldset default {
fields: title, text
}
rank-profile post inherits default {
rank-type text: about
rank-type title: about
first-phase {
expression: nativeRank(title, text)
}
}
}