2017-04-03 54 views
1

我已经定义为字段类型如下:Solr的:如何条款的顺序传递给字段作为单个查询字符串

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100" multiValued="true"> 
<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="2"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="2"/> 
</analyzer> 

我要查询的字段(名为passage_body)这种类型如下(例如):

q = passage_body:(DPGC召集的术语)

问题是索引这个字段中的文本时,分析器工作得很好。但是,在查询时,如果将debugQuery参数设置为true,则可以看到该字段未按预期进行分析(不形成带状疱疹)。这是调试输出:

<str name="rawquerystring">passage_body:(the term of dpgc convener)</str><str name="querystring">passage_body:(the term of dpgc convener)</str><str name="parsedquery">passage_body:term passage_body:dpgc passage_body:convener</str><str name="parsedquery_toString">passage_body:term passage_body:dpgc passage_body:convener</str> 

当我在Solr admin中分析查询时,输出如预期。 我甚至尝试将标准查询解析器的“母猪”查询参数设置为false,但即使这样也行不通。

总之,这是我的最终查询:

http://localhost:8983/solr/mnitdocs/select?q=passage_body:(the term of dpgc convene)&sow=false&debugQuery=true 

概括地说,我想匹配查询的瓦至passage_body的带状疱疹。 请建议方法。其他建议也值得欢迎,因为我是Solr的新手。

我正在使用Solr 5.3.1。

+0

只是一个猜测,但你有没有尝试url编码整个q =有效载荷:passage_body%3A(%20term%20of%20dpgc%20convene) –

+0

你可以发表一个你想如何解析查询字符串的例子吗? –

+0

我想将查询字符串作为“DPGC Convener的术语”传递。我使用引号来表示它是单个字符串,但不是短语。现在分析器应该处理这个字符串(标记,制作带状疱疹)。 – user7568303

回答

0

我想出了这个问题。将查询参数“sow”设置为false可以正常工作。它只是在最新版本的solr(6.5.0)中才可用。所以我切换到Solr 6.5.0。

相关问题