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>
好的,所以你说SpanNot的工作是找到一个跨度,包括世界各地的(疯狂的大或疯狂的简单),但排除任何比赛?如果是这样,我想我已经开始明白了。我将使用哪种SpanQuery来排除任何匹配“约克”的文档? –
Brandon
我的目标:查找包含单词“新”的文档,排除包含单词“约克”的文档。 – Brandon
@Brandon - 如果你只是想找到任何匹配“新”,但不是“约克”的东西,我根本不会使用SpanQuery。像这样的一个查询:'标题:(new-york)'会做到这一点。使用xmlparser,你可以使用布尔查询,参见[示例这里](https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-XMLQueryParser)。 – femtoRgon