我刚刚开始尝试使用Solr,我已经认为我正试图向后使用它。有人能让我知道我想做什么是可能的吗?
在正常使用中,可以指定一个短语,然后在存储的文档中搜索该短语的实例。但是,我有一个存储短语列表,我正在尝试确定我的查询字符串包含哪些短语。
例如:假设我在Solr中存有这样的短语:
1:"fish fingers"
2:"apple pie"
如果我的搜索词是“我喜欢鱼手指”,那么我希望Solr返回第一条记录。如果它是“我喜欢鱼手指和苹果派”,那么我希望它能同时返回两个记录。但如果它是“我喜欢苹果手指和鱼饼”,那么我希望它不会返回任何记录。
(当然,如果短语总是两个单词,那么通过构造一个包含所有两个单词短语的析取查询来实现这一点非常简单。但短语可能有任何长度。)。
感谢您的帮助。
答案 0 :(得分:2)
我相信shingles - 用于匹配的令牌n-gram - 可能是解决问题的开始。
答案 1 :(得分:2)
我决定阅读每个Filter和Tokenizer的文档,这是我遇到this description of the PositionFilterFactory的地方:
Another example is when exact matching hits
are wanted for _any_ shingle within the query
此页面上给出的配置几乎正是我想要的。不幸的是,由于似乎没有一个过滤器将由分词器分割的术语粘合回一个令牌,我不能做任何干预。但也许我可以自己敲一下这样的过滤器。
答案 2 :(得分:1)
这似乎与谷歌搜索设备提供的匹配匹配搜索功能相同,它试图将索引条款与查询匹配,而不是相反。我们也必须实施自定义解决方案。
您可能需要为此实现自己的查询解析器 而且正如您已经提到的那样,这可能是您唯一的解决方案。