Solr Lucene XmlQueryParser跨度不排除排除

问题描述:

如何在XmlQueryParser语法中获得此标准lucene查询?Solr Lucene XmlQueryParser跨度不排除排除

headline:(new -york) 

这是我到目前为止有:

{!xmlparser} 
<SpanNot fieldName="headline"> 
    <Include> 
    <SpanTerm>new</SpanTerm> 
    </Include> 
    <Exclude fieldName="headline"> 
    <SpanTerm>york</SpanTerm> 
    </Exclude> 
</SpanNot> 

我本来不包括字段名=“标题”为排除节点,但我加了它,当我一直在得到“约克”头条新闻。

这里有一些结果被未来通过:

{"id":243832340000000092, "headline":"New look pour New York"}, 
{"id":243661152000000019, "headline":"New York/New Market Project"}, 
{"id":243959040000000448, "headline":"New York Backs New Transmission Lines"} 

下面是一些在响应调试输出:

"rawquerystring":"{!xmlparser}\n<SpanNot fieldName=\"headline\">\n <Include>\n\t<SpanTerm>new</SpanTerm>\n </Include>\n <Exclude fieldName=\"headline\">\n\t<SpanTerm>york</SpanTerm>\n </Exclude>\n</SpanNot>", 

"querystring":"{!xmlparser}\n<SpanNot fieldName=\"headline\">\n <Include>\n\t<SpanTerm>new</SpanTerm>\n </Include>\n <Exclude fieldName=\"headline\">\n\t<SpanTerm>york</SpanTerm>\n </Exclude>\n</SpanNot>", 

"parsedquery":"SpanBoostQuery(spanNot(headline:new^1.0, headline:york^1.0, 0, 0)^1.0)", 

"parsedquery_toString":"spanNot(headline:new^1.0, headline:york^1.0, 0, 0)^1.0", 
     "QParser":"XmlQParser" 

问题是为什么我收到纽约在我的结果?

您的查询正在查找包含“新”,但不包含“约克”的跨度(字段的某个片段)。简单地使用“新”这个词就足以说明这一点。通常,这将与SpanNear或类似的东西一起使用,这使它更有用。例如,如果您的Include,intead中的术语“新”和“term2”有SpanNear,则可以匹配“新的其他东西term2约克等”,因为“约克”的实例落在与包括,但“纽约term2”将不匹配,因为“约克”落在SpanNear内。

SpanNot实际上确实有constructor arguments你可以使用到一定距离内检查外包括跨度。我不确定这是否支持xmlparser(我不熟悉它),但如果是这样,我会想像这样的:

{!xmlparser} 
<SpanNot fieldName="headline"> 
    <Include> 
    <SpanTerm>new</SpanTerm> 
    </Include> 
    <Exclude fieldName="headline"> 
    <SpanTerm>york</SpanTerm> 
    </Exclude> 
    <Pre>0</Pre> 
    <Post>1</Post> 
</SpanNot> 
+0

好的,所以你说SpanNot的工作是找到一个跨度,包括世界各地的(疯狂的大或疯狂的简单),但排除任何比赛?如果是这样,我想我已经开始明白了。我将使用哪种SpanQuery来排除任何匹配“约克”的文档? – Brandon

+0

我的目标:查找包含单词“新”的文档,排除包含单词“约克”的文档。 – Brandon

+0

@Brandon - 如果你只是想找到任何匹配“新”,但不是“约克”的东西,我根本不会使用SpanQuery。像这样的一个查询:'标题:(new-york)'会做到这一点。使用xmlparser,你可以使用布尔查询,参见[示例这里](https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-XMLQueryParser)。 – femtoRgon