5

为了索引我的网站,我有一个 Ruby 脚本,它会生成一个 shell 脚本,将我的文档根目录中的每个文件上传到 Solr。shell 脚本有很多行,如下所示:

  curl -s \
 "http://localhost:8983/solr/update/extract?literal.id=/about/core-team/&commit=false" \
 -F "myfile=@/extra/www/docroot/about/core-team/index.html"

...并以:

curl -s http://localhost:8983/solr/update --data-binary \
'<commit/>' -H 'Content-type:text/xml; charset=utf-8'

这会将我的文档根目录中的所有文档上传到 Solr。我使用tika 和 ExtractingRequestHandler将各种格式的文档(主要是 PDF 和 HTML)上传到 Solr。

在生成这个 shell 脚本的脚本中,我想根据它们的 id 字段(a/k​​/a url)是否匹配某些正则表达式来提升某些文档。

假设这些是提升规则(伪代码):

boost = 2 if url =~ /cool/
boost = 3 if url =~ /verycool/
# otherwise we do not specify a boost

将索引时间提升添加到我的 http 请求的最简单方法是什么?

我试过:

curl -s \
 "http://localhost:8983/solr/update/extract?literal.id=/verycool/core-team/&commit=false" \
 -F "myfile=@/extra/www/docroot/verycool/core-team/index.html" \
 -F boost=3

和:

curl -s \
 "http://localhost:8983/solr/update/extract?literal.id=/verycool/core-team/&commit=false" \
 -F "myfile=@/extra/www/docroot/verycool/core-team/index.html" \
 -F boost.id=3

搜索结果的顺序都没有区别。我想要的是提升结果在搜索结果中排在首位,无论用户搜索什么(当然前提是文档包含他们的查询)。

我知道,如果我以 XML 格式发布,我可以为整个文档或特定字段指定提升值。但是如果我这样做,则不清楚如何将文件指定为文档内容。实际上,tika 页面提供了一个部分示例:

curl "http://localhost:8983/solr/update/extract?literal.id=doc5&defaultField=text" \
--data-binary @tutorial.html -H 'Content-type:text/html'

但同样不清楚在哪里/如何指定我的提升。我试过:

curl \ 
"http://localhost:8983/solr/update/extract?literal.id=mydocid&defaultField=text&boost=3"\
--data-binary @mydoc.html -H 'Content-type:text/html'

curl \ 
"http://localhost:8983/solr/update/extract?literal.id=mydocid&defaultField=text&boost.id=3"\
--data-binary @mydoc.html -H 'Content-type:text/html'

两者都没有改变搜索结果。

Is there a way to update just the boost attribute of a document (not a specific field) without altering the document contents? If so, I could accomplish my goal in two steps: 1) Upload/index document as I have been doing 2) Specify boost for certain documents

4

1 回答 1

3

To index a document in Solr, you have to POST it to the /update handler. The documents to index are put in the body of the POST request. In general, you have to use the xml format format of Solr. Using that xml, you can add a boost value to a specific field or to a whole document.

于 2011-02-09T02:33:06.327 回答