2016-05-05 7 views
0

私は、IDのリストを持っていると私はそれらのIDに基づいて文書を検索するとIdのフォーマットは、このようなものです -特定のIDによるsolrjで検索

id:<[email protected]>2016-04-22T21:12:30Z 

私はコード -

を書きました
SolrQuery query = new SolrQuery(); 
query.setQuery("id:<[email protected]>2016-04-22T21:12:30Z"); 
query.setFields("id","from","subject"); 

QueryResponse response = server.query(query); // server is a CloudSolrServer object 

SolrDocumentList results = response.getResults(); 

for(i=0;i<results.size();i++) { 
    system.out.println(results.get(i); 
} 

しかし、私はエラー

org.apache.solr.common.SolrException: org.apache.solr.search.SyntaxError: Cannot parse 'name:': Encountered "<EOF>" at line 1, column 5. 
Was expecting one of: 
    <BAREOPER> ... 
    "(" ... 
    "*" ... 
    <QUOTED> ... 
    <TERM> ... 
    <PREFIXTERM> ... 
    <WILDTERM> ... 
    <REGEXPTERM> ... 
    "[" ... 
    "{" ... 
    <LPARAMS> ... 
    <NUMBER> ... 

取得していますが、私はこの行のID値にエスケープ文字を追加しようとしました

query.setQuery("id:<[email protected]>2016-04-22T21:12:30Z"); 

しかし、誰も私が上の行をエスケープ文字を使って書くのを手伝ってもらえますか、それを達成するための他の方法を提案してください。

参考までにstackoverflowで1つのリンクが見つかりましたが、それは私を助けません。ここに貼り付けるリンクはありません。

Solrのバージョン:4.10.3

+0

あなたはsolr admin ui ...を介して同じクエリを実行できますか?そこに結果を得ましたか?フィールドの種類は何ですか?あなたはschema.xmlを共有できますか? –

答えて

1

のような?

あなたのidは文字列フィールドであれば、その後、その後、

QueryParser.escape("") 
1

は、これを試してみてください変数にid値を割り当て、その変数を使用します。 solrはクエリをトークン化しますので、ここでフレーズクエリの使用を検討する必要があります。あなたのSolrのスキーマ内のフィールドIDを定義する方法を

docID="\"<[email protected]>2016-04-22T21:12:30Z\""

query.setQuery("id:"+docID); 
0

キーワードでLuceneの脱出を使用し、あなたのIDがテキストフィールドである場合は、検索キーワード、 を囲む二重引用符を使用して、私は、これは明確な解決策だと思います:

query.setQuery("id:"+QueryParser.escape("<[email protected]>2016-04-22T21:12:30Z"); 
関連する問題