©
This document uses PHP Chinese website manual Release
(PHP 4 >= 4.0.1, PECL yaz >= 0.9.0)
yaz_search — Prepares for a search
$id
, string $type
, string $query
)yaz_search() prepares for a search on the given connection.
Like yaz_connect() this function is non-blocking and only prepares for a search to be executed later when yaz_wait() is called.
id
The connection resource returned by yaz_connect() .
type
This parameter represents the query type - only "rpn" is supported now in which case the third argument specifies a Type-1 query in prefix query notation.
query
The RPN query is a textual representation of the Type-1 query as defined by the Z39.50 standard. However, in the text representation as used by YAZ a prefix notation is used, that is the operator precedes the operands. The query string is a sequence of tokens where white space is ignored unless surrounded by double quotes. Tokens beginning with an at-character (@) are considered operators, otherwise they are treated as search terms.
Construct | Description |
---|---|
@and query1 query2 | intersection of query1 and query2 |
@or query1 query2 | union of query1 and query2 |
@not query1 query2 | query1 and not query2 |
@set name | result set reference |
@attrset set query | specifies attribute-set for query. This construction is only allowed once - in the beginning of the whole query |
@attr [set] type=value query | applies attribute to query. The type and value are integers specifying the attribute-type and attribute-value respectively. The set, if given, specifies the attribute-set. |
You can find information about attributes at the » Z39.50 Maintenance Agency site.
Note:
If you would like to use a more friendly notation, use the CCL parser - functions yaz_ccl_conf() and yaz_ccl_parse() .
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 Query Examples
You can search for simple terms, like this:
computer
The query
"knuth donald"
This query applies two attributes for the same phrase.
The query
@and @or a b @not @or c d e
Another, more complex, one:
@attrset gils @and @attr 1=4 art @attr 1=2000 company
[#1] k dot andris at gmail dot com [2009-06-17 15:49:47]
To display holdings data set the syntax and the record format to "opac" (at least for Horizon ILS). It will give you an xml, containg <holding> elements with all info:
<?php
$z = yaz_connect(...
yaz_syntax($z, 'opac');
yaz_search($z, 'rpn', '@attr 1=4 "title%"');
yaz_wait();
$hits = yaz_hits($z);
yaz_range($z, 1, $hits);
yaz_present($z);
for($i = 1; $i <= $hits; $i++)
my_display(yaz_record($z, $i, 'opac'));
yaz_close($z);
function my_display($s)
{
$lines = explode("\n", trim($s));
var_dump($lines);
}
?>
[#2] Colibri [2009-01-22 08:42:53]
When querying a SRU/SRW server, the "type" parameter must(?) be specified as "cql", e.g.
yaz_search($handle, "cql", "bath.isbn=1234");
[#3] jwohlers at mail dot wcc dot cc dot il dot us [2002-01-31 17:21:32]
Quick Reference For Attribute Fields
(eg: "@attr 2=" refers to the Relation attribute)
1 = Use Field
2 = Relation
3 = Position
4 = Structure
5 = Truncate
6 = Completeness