2013-04-28 80 views
3

solr中有两个文本字段,它们都是白色空间标记并且具有小写过滤器。下面是模式:查询两个字段相同的文档?

<fieldType name="text_ac" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

<field name="field1" type="text_ac" indexed="true" stored="true" required="false" omitNorms="true" default=""/> 

<field name="field2" type="text_ac" indexed="true" stored="true" required="false" omitNorms="true" default=""/> 

如何查询Solr的返回结果FIELD1整串是一样的场2在查询时(字段1 ==域2)?

谢谢。

+0

您可以给我们提供一个例子吗? – Jayendra 2013-04-28 09:50:32

+1

偶然,你是否想要执行[Solr中的加入](http://wiki.apache.org/solr/Join)? – femtoRgon 2013-04-29 15:46:07

+0

@Jayendra,我已经添加了模式。谢谢。 – Henry 2013-04-29 19:41:25

回答

9

据我所知,Solr或Lucene核心都不支持在文档中比较一个字段和另一个字段。

完成此操作的一种简单方法是在索引时执行比较,并将结果存储在索引中。也就是说,如果您有field1field2,请创建一个字段1_equals_2,并根据您在添加文档时的比较结果将其与true进行索引(如果它们相同)。然后你可以简单地搜索1_equals_2:true

+0

谢谢,这在索引时肯定是一个选项。 – Henry 2013-05-03 21:30:03

1

您是否试过函数'strdist'和范围查询'frange'?像这样的范围查询,将有助于:

{!FRANGE L = 1 U = 1} strdist(字段1,字段2,编辑)