【问题标题】:Solr search not giving exact result for single word termSolr 搜索没有给出单个词项的确切结果
【发布时间】:2021-02-14 19:27:05
【问题描述】:

我是 solr 搜索查询的初学者,我试图获得给定术语的准确结果。对于包含多个单词的术语,我得到了准确的结果。但是对于只有一个词的术语,我没有得到准确的搜索结果。在否决或关闭此问题之前,请考虑该场景。我要求精确搜索单个单词。

例如

  1. 如果我搜索“要添加的船舶” 我得到结果ship to address

  2. 植物:我得到植物编号、植物类型、植物描述等结果,然后是 植物 我希望我的确切词植物首先出现,然后我希望其他相关搜索出现

我尝试过的方法

/query?q=(name:"PLant")&stopwords=true           //giving output I mentiond above

/query?q=(name:"^PLant$")&stopwords=true        //not giving any output

/query?q="PLant"&stopwords=true                //giving fuzzy output

任何帮助将不胜感激。

【问题讨论】:

  • 命中将由您的字段的分析链确定 - 该链可能是一个有损过程,因此如果您实际上没有存储确切的令牌,您将无法进行准确的匹配。您不能直接查询存储的文本。您可以添加第二个字段,然后使用copyField 将相同的内容复制到该字段中,然后使用该字段来提升那些具有完全匹配的内容。此外,默认行为是内容较短(即令牌较少)的字段将略微提升,但这也取决于您对该字段的设置。
  • 那么您能否为 aboce 场景添加一个演示查询,因为我对 solr 几乎没有任何经验
  • 您必须添加您正在使用的字段的定义以及您如何查询它 - 在您的第三个示例中,您没有字段名称,因此它将使用定义为默认搜索字段的任何内容(通常为_text_)。如果您使用默认的 text 字段,您将获得您提到的点击。但是由于您还说您不能编辑架构,所以我不确定您将能够更改什么(您可以更改字段名称吗?添加字段?更改字段的类型?)。
  • OK 我是如何改变架构 <field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 这样的,但结果是一样的
  • 像第一次一样再次将您的内容提交给 Solr。发出 deleteByQuery(Web 管理界面应该让您选择直接执行 IIRC)以在必要时首先删除所有文档。

标签: search solr full-text-search search-engine


【解决方案1】:

您需要将string 用作您的字段fieldtype name

将字符串应用为fieldtype 并重新索引数据。

<field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />

String 将单词/句子存储为一个精确的字符串,而不对其执行任何标记化。 它在存储精确匹配的情况下很有用,例如分面、排序。

string 类型相反的是textText 对数据进行标记化,执行小写等处理。这在我们想要匹配句子的一部分时很有帮助。

如果您想实现小写搜索,请使用以下字段类型作为您的字段。

<fieldType name="forExactMatch" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>

然后您的字段定义将如下所示

<field name="name" type="forExactMatch" indexed="true" stored="true"/>

【讨论】:

  • 非常感谢您的回答,但我无法编辑架构文件。架构文件中有文本类型。我需要其他方法
  • 尝试使用 edismax 并使用词组搜索并提供更高的提升
  • 你能添加示例演示吗?我真的是一个初学者,我不知道如何提升。如果你添加一个演示,这将是一个很大的帮助
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多