【问题标题】:Solr substring search yields all indexed resultsSolr 子字符串搜索产生所有索引结果
【发布时间】:2014-08-05 00:14:18
【问题描述】:

为了进行子字符串搜索,我添加了一个新的 fieldType - 带有 NgramFilter 的“Text”。

它工作得很好,但缺点是这个问题

例子

name = ['Apple','Samy','And','a']

当我搜索name:a 时,上述所有项目都会被拉起。即使搜索更改为“应用程序”。以上所有项目都被拉出。我该如何解决这个问题?

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="100" />
    </analyzer>
</fieldType>

【问题讨论】:

  • 是否所有值都为同一个文档编入索引(从您的描述中不清楚)?现场分析显示什么? (在/admin下,选择核心和分析)
  • 您的意思是从管理文件夹或管理控制台获取它...?
  • 通过网络界面。它可以让您准确了解 Solr 对索引值和查询值的作用。
  • 我去了 solr admin/analysis...给我的字段名称“name”和几个值..但无法从中推断出任何东西..当我搜索“Apple”时,它会获取'a' 值也是如此。 mingramsize=1, 将索引 'a' 但为什么在搜索“Apple”时会获取它...
  • @Mats:我添加了分析快照供您参考..

标签: solr


【解决方案1】:

正如您在分析中看到的那样,索引值和查询值都通过 EdgeNGramFilter 进行解析 - 这意味着它将匹配任何其他内容的子字符串。添加一个更简单的过滤器来查询字段,你应该很高兴。

来自 Wiki 的示例应该可以通过复制和粘贴来使用:

<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="15" side="front"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
   </analyzer>
</fieldType>

我最初的猜测是,由于您没有提供两个替代定义,Solr 将为两者使用相同的链。您的分析输出证实了这种怀疑。尝试使用type="query" 添加一个分析器,以获得一个特定的链来查询该字段(您不希望 EdgeNGram 两个地方都需要)。

【讨论】:

  • :我有一些与同一件事相关的东西......当我进行 q 搜索时,即; text:'app'..它不会产生任何结果,但 'name':'app' 会产生结果...为什么 text:'app' 不会产生结果..
  • 再次,使用分析页面查看索引时生成了哪些值以及搜索时执行了哪些分析。这将告诉您为什么条目之间不匹配。
  • 我正在查询控制台中搜索“app”,它转换为 q=app..不确定“q”对象的分析字段名称/类型是什么...
  • 您正在搜索“文本”字段,因此请进行分析,选择“文本”,输入“苹果”作为索引值(如果这是您放入索引的内容)和“应用程序”作为查询值,如果这就是您要搜索的内容。结果输出是 Solr 在插入和查询时对该字段所做的,如果不存在匹配项(意味着双方的标记相同),您将不得不调整您的分析链。
  • 我这样做了...当我输入“文本”并对其进行分析时。 “Apple”存储为“Apple”..当我输入“Name”(存储为文本)并分析它时,“Apple”存储为“a”,“ap”,“app”,“apple”
猜你喜欢
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 2012-02-28
相关资源
最近更新 更多