Lucene助力不起作用

时间:2018-02-16 21:09:20

标签: c# full-text-search lucene.net

我正在索引文档并按如下方式设置提升:

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的副本。

1 个答案:

答案 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