2015-02-09 90 views
0

我有一个很大的问题和有关solr行为的问题,请你帮我解决这个问题。Solr中的准确字母匹配与文本字段的单个/多个字

不介意我的问题太长了。

我的客户有如下要求。

  • 我们需要一个matchall和matchallpartial场景。
  • 这取决于我们在应用程序级别执行matchall或matchallpartial的搜索字段。

我们也有通配符,左边和右边都是通配符条目。

我使用关键词标记器进行索引以及查询它是满足我在所有情况下的需求。但同义词,停用词和词干根本不工作。因为我使用关键词标记器,它正在构建整个短语的查询。我试过与StandaradTokenizer工厂它仅失败matchall情况下,它仍然工作正常。

请问您可以发布一些示例查询和建议,以获得与单个单词/多字的精确匹配。

例如 如果我的领域有 “指标指标组件”这是整个短语。即使我正在寻找“指标”我不想要的结果即将获得结果。

如果我使用关键词tokenizer,我得到了我想要的但它在同义词,停用词方案中失败。

有些时候(取决于逻辑)我将使用matchallpartial场景的相同文本提交时间,我希望“indicator”的结果如何通过stadardtokenizer获得整个短语/单词的准确matchall。

请帮帮我。

感谢, 斯里兰卡

+0

不要忘记你可以索引多次相同的字段与不同的标记化;您可以使用查询部分匹配的标记化版本,以及查询完整匹配的更确切版本。 – Yann 2015-02-09 15:23:24

+0

Yann如何在不同的领域使用不​​同的标记器。 – 2015-02-19 14:59:28

+0

是的,您可以在您的模式中定义各种fieldTypes;通常为了完全匹配,您将使用KeywordTokenizerFactory(实际上不实际标记),对于部分匹配,则使用StandardTokenizerFactory。您可以在两个字段(每个字段都有一个字段)中编制相同的内容,并根据您想要的匹配类型,查询或其他字段进行索引。 – Yann 2015-02-19 15:15:08

回答

0

我列出两个例子这必将有助于获得精确匹配

我的第一个查询是: - /select?q=name:anand kishore - 通过这种方式,我会得到1000条记录,这将是具有名阿南德或纪或两者

我的第二个查询: - /select?q=name:"anand kishore" - 通过这一点,我会得到的,这将有阿南德纪等,这些记录(阿南德纪tripathy卡迈勒·阿南德纪)

个结果

我的第三个查询是: - /select?q=name:"kamal anand kishore" - 通过这我会得到只有一个匹配的结果,即kamal anand kishore

+0

选择?q =(sectionName_text_en_gb :(“指标组件”^ 10.0))我没有得到任何结果。我现在使用的StadardKeyywordTokenizer – 2015-02-19 14:58:17

+0

工作对我来说这是我使用的领域 <字段类型名称=“text_general”级=“solr.TextField” positionIncrementGap =“100”> \t \t <分析型=“指数”> 什么\t \t \t \t \t \t <过滤器类= “solr.StopFilterFactory” IGNORECASE = “真” 的话= “stopWords.txt中”/> \t \t \t <! - 在这个例子中,我们只会在查询时使用同义词 - > \t \t \t <过滤器类= “solr.LowerCaseFilterFactory”/> \t \t \t \t <分析器类型= “查询”> \t \t \t继续.... – Swaraj 2015-02-20 05:34:33

+0

\t \t \t <过滤器类= “solr.StopFilterFactory” IGNORECASE = “真” 的话= “stopWords.txt中”/> \t \t \t <过滤器类= “solr.SynonymFilterFactory” 同义词= “synonyms.txt” IGNORECASE = “真” 扩大= “真”/> \t \t \t <过滤器类= “solr.LowerCaseFilterFactory”/> \t \t \t – Swaraj 2015-02-20 05:35:21