【问题标题】:Solr query is returning partial matches for one field, and not a different fieldSolr 查询返回一个字段的部分匹配,而不是另一个字段
【发布时间】:2011-07-08 21:00:08
【问题描述】:

我的网站上有一个搜索自动完成功能,我正在使用 Solr 来查找匹配的文档。我试图在页面标题上获得部分匹配,例如 Java* 将匹配 Java、Javascript 等。截至目前,自动完成设置为页面中的所有文本部分匹配,这给出了一些奇怪的结果,所以我决定切换到使用页面标题。但是,当我尝试将页面文本的搜索词从 text 切换到 title 时,查询突然不再选择部分匹配项。这是我的原始查询的示例:

q=text:java^2+text:"java"
  &hl=true&hl.snippets=1&hl.fragsize=25&hl.fl=title&start=0&rows=3

不幸的是,为我设置这个的人不再和我一起工作,所以我不知道“引擎盖下”发生了什么。我在后端使用 Spring/J2EE,如果这有什么不同的话。

【问题讨论】:

    标签: java solr


    【解决方案1】:

    您需要确保该字段不是基于字符串的字段。如果您查看您的schema.xml,您可以查找此内容。如果您在字符串字段中使用Java* 搜索,它将仅匹配以Java* 开头的标题。

    另一件事是您需要确保知道通配符查询区分大小写 (see this)。

    【讨论】:

    • 奇怪的是我们之前使用的查询根本没有使用通配符,它​​仍然选择了部分匹配。有什么理由会这样吗?
    • 这取决于一点。如果您配置了分词器,它可能会根据某些条件对单词进行分词。有例如一个 PatternTokenizer,它在 java 2 me 中拆分 Java2Me 之类的东西,因此如果您使用 Java2Me 搜索 Java 文本,也会返回。
    【解决方案2】:

    取决于如何分析字段标题,查看 schema.xml 以了解该字段是什么类型以及如何分析它以创建术语。简单的方法是转到 solr admin http://localhost:8983/solr/admin/analysis.jsp,选择相同的名称选项,输入字段名称(我猜是“标题”),输入一些示例文本并查询以查看创建和匹配的术语。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多