【问题标题】:Solr not showing updated documentsSolr 未显示更新的文档
【发布时间】:2017-09-02 21:25:22
【问题描述】:

我正在尝试更新 solr 文档中的特定字段。出于测试目的,我使用作者字段。之后我会尝试更新日期字段。我在 cygwin 终端中使用 curl。这是我在终端中输入的命令:

curl http://localhost:8983/solr/MaharaPortfolioA/update -d '[{"url":"https://www.moopaed.de/mahara/view/view.php?id=6920","author":{"set":"Herbert"}}]'

为了检查是否成功,我正在使用以下命令并获得此响应:

$ curl http://localhost:8983/solr/MaharaPortfolioA/get?id="https://www.moopaed.de/mahara/view/view.php?id=6920"
{
  "doc":
  {
    "url":"https://www.moopaed.de/mahara/view/view.php?id=6920",
    "portfolio_title":"IT 2 Portfolio - View 2",
    "title":"Themenschwerpunkt Informationssysteme  - moopaed mahara",
    "author":"Herbert",
    "indexDate":"2017-04-05T22:04:10Z",
    "nrImages":8,
    "nrWords":7474,
    "nrUploadedImages":6,
    "nrLinks":0,
    "cohort":"IT3 WS 2013/2014",
    "lecture":"OOP",
    "nrWikipediaImages":0,
    "nrWikipediaLinks":0,
    "_version_":1564023239370342400}}

根据回复,一切似乎都很好:作者的名字从“路易莎”变成了“赫伯特”。但是,如果我使用查询来搜索“Herbert”,我将得不到任何结果 (http://localhost:8983/solr/MaharaPortfolioA/select?q=Herbert)。在寻找解决方案时,我发现了导致该问题的不同可能原因:

我不知道为什么我搜索“Herbert”没有得到任何回应。

  • 是不是因为我的唯一键是 url 而不是整数值?
  • 还是因为我通过 Cygwin 使用 Curl?此外还有一个 cURL(URL 客户端)和 curl(编程
    语言)。如果教程使用这个术语,它们是指 cURL 吗?
  • 另一个原因可能是“作者”在编制索引时被过滤和标记。也许我的更新没有通过这些操作?

提前致谢

【问题讨论】:

  • 日志是怎么说的?
  • @Oyeme 当我尝试更改“nrWords”时,日志为:'2017-04-07 14:02:28.745 INFO (qtp870698190-14) [ x:MaharaPortfolioA] oasupLogUpdateProcessorFactory [MaharaPortfolioA] webapp =/solr path=/update params={}{add=[moopaed.de/mahara/view/view.php?id=6093(1564028435152502784)]} 0 15'
  • 您是否尝试将 commit=true 添加到您的链接中? curl curl localhost:8983/solr/MaharaPortfolioA/update?commit=true -d '[{"url":"moopaed.de/mahara/view/view.php?id=6920","author":{"set":"Herbert"}}]' (最后 commit=true 参数告诉 Solr 提交我们发送给它的更新应此要求。)
  • 尝试重启solr服务,有时索引可能会乱...
  • 实际上在搜索author 字段吗? q=author:Herbert 将是用于查询 author 的标准 Lucene 语法。当您使用q=Herbert 时,搜索会转到默认搜索字段,这可能不是author

标签: curl solr


【解决方案1】:

您实际上并没有搜索作者字段:q=author:Herbert 将是用于查询作者的标准 Lucene 语法。当您使用q=Herbert 时,搜索会转到默认搜索字段,该字段可能不是作者(但通常是text)。

如果您使用edismaxdismax 查询解析器,您可以使用qf=author text 来搜索textauthor 字段,您可以使用qf=author^5 text 来提供更多相关性author 字段中的点击权重。

text字段的默认配置可能不像stored="true"那样,会丢弃实际内容(只保留索引词进行搜索)。

如果您使用ExtractingRequestHandler / Apache Tika / Solr Cell 为内容编制索引,则该内容将添加到名为content 的字段中。如果该字段不存在,则删除内容。

Tika 将所有提取的文本添加到内容字段。

您可以使用fmap.content=<fieldname> 将内容映射到不同的字段名称。

【讨论】:

    【解决方案2】:
    1. 首先确保在架构中将字段“作者”设置为 indexed="true",并设置为您期望的类型。您可以使用 Solr 管理员的分析工具和模式浏览器来验证您的假设。

    2. 您使用实时获取来评估更新是否运行良好。这很好,但请记住,即使没有发生提交,实时获取也有效(因为它与事务日志合作),所以请确保软提交或硬提交(触发 openSearcher=true)

    3. 确保您的查询对您的用例有意义。如果要按作者具体搜索“author:Herbert”是正确的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多