我正在索引文档并按如下方式设置提升:
with open('file.txt') as f:
for line in f:
parts = line.strip().partition('|')
new_line = ''.join(parts[:2]) + 'BA|' + parts[2]
因为我希望之前出现某些文件。例如,我希望首先显示更新的新闻。
当我进行搜索时,像这样:
var Qs = require('qs');
function runRequest() {
return axios({
method: 'GET',
url: 'https://proxy.hackeryou.com',
dataResponse: 'json',
paramsSerializer: function (params) {
return Qs.stringify(params, { arrayFormat: 'brackets' })
},
params: {
reqUrl: `https://od-api.oxforddictionaries.com:443/api/v1/entries/en/bomb/synonyms;antonyms`,
proxyHeaders: {
'header_params': 'value',
"Accept": "application/json",
"app_id": "8ec64674",
"app_key": "b5a5e3f12d46fc718b916e1aaa1c3509"
},
xmlToJSON: false
}
}).then((result) => {
const synonym = result.data.results.map(res=>{
return res.lexicalEntries.map(secondResult=>{
return secondResult.entries.map(thirdResult=>{
return thirdResult.senses.map(fourthRes=>{
return fourthRes.synonyms.map(fifthRes=>{
turnArray(fifthRes.id)
return fifthRes.id;
})
})
})
})
});
})
.catch((error) => {
alert("Oops!");
});
}
function turnArray(list){
console.log(list)
}
runRequest();
查询被解析为document.SetBoost(5f);
,并在内部使用此解析:
var parser = new QueryParserEx(Version.LUCENE_29, "contents", analyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
parser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
Query query;
query = parser.Parse("text*");
不确定为什么它仍在使用Constant Score重写器。谁能解释一下?
我也相信我不能在搜索时提升,因为我不需要提升某些条款,但某些文件(例如,最近的新闻首先出现)。
PS:不是this question的副本。
答案 0 :(得分:0)
没关系。我正在使用QueryParser
的自定义实现,其方法NewTermQuery
被覆盖。
这样的事情:
protected override Query NewTermQuery(Term term)
{
var field = term.Field();
var text = term.Text() ?? "";
if (field == "contents" &&
text.Length >= 3 &&
text.IndexOfAny(new[] { '*', '?' }) < 0)
{
var wq = new WildcardQuery(new Term(field, text + "*"));
return wq;
}
return base.NewTermQuery(term);
}
WildcardQuery
未采用该配置。我所要做的只是在wq.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);
内拨打if
。