# Quickstart
## Installation
Get it from PyPI:
pip install rcsbsearchapi
Or, download from [GitHub](https://github.com/rcsb/py-rcsbsearchapi)
## Getting Started
### Basic Query Construction
#### Full-text search
To perform a "full-text" search for structures associated with the term "Hemoglobin", you can create a `TextQuery`:
```python
from rcsbsearchapi import TextQuery
# Search for structures associated with the phrase "Hemoglobin"
query = TextQuery(value="Hemoglobin")
# Execute the query by running it as a function
results = query()
# Results are returned as an iterator of result identifiers.
for rid in results:
print(rid)
```
#### Attribute search
To perform a search for specific structure or chemical attributes, you can create an `AttributeQuery`.
```python
from rcsbsearchapi import AttributeQuery
# Construct a query searching for structures from humans
query = AttributeQuery(
attribute="rcsb_entity_source_organism.scientific_name",
operator="exact_match", # Other operators include "contains_phrase", "exists", and more
value="Homo sapiens"
)
# Execute query and construct a list from results
results = list(query())
print(results)
```
Refer to the [Search Attributes](https://search.rcsb.org/structure-search-attributes.html) and [Chemical Attributes](https://search.rcsb.org/chemical-search-attributes.html) documentation for a full list of attributes and applicable operators.
Alternatively, you can also construct attribute queries with comparative operators using the `rcsb_attributes` object (which also allows for names to be tab-completed):
```python
from rcsbsearchapi import rcsb_attributes as attrs
# Search for structures from humans
query = attrs.rcsb_entity_source_organism.scientific_name == "Homo sapiens"
# Run query and construct a list from results
results = list(query())
print(results)
```
#### Grouping sub-queries
You can combine multiple queries using Python bitwise operators.
```python
from rcsbsearchapi import rcsb_attributes as attrs
# Query for human epidermal growth factor receptor (EGFR) structures (UniProt ID P00533)
# with investigational or experimental drugs bound
q1 = attrs.rcsb_polymer_entity_container_identifiers.reference_sequence_identifiers.database_accession == "P00533"
q2 = attrs.rcsb_entity_source_organism.scientific_name == "Homo sapiens"
q3 = attrs.drugbank_info.drug_groups == "investigational"
q4 = attrs.drugbank_info.drug_groups == "experimental"
# Structures matching UniProt ID P00533 AND from humans
# AND (investigational OR experimental drug group)
query = q1 & q2 & (q3 | q4)
# Execute query and print first 10 ids
results = list(query())
print(results[:10])
```
These examples are in `operator` syntax. You can also make queries in `fluent` syntax. Learn more about both syntaxes and implementation details in [Constructing and Executing Queries](query_construction.html#constructing-and-executing-queries).
### Supported Search Services
The list of supported search service types are listed in the table below. For more details on their usage, see [Search Service Types](query_construction.html#search-service-types).
|Search service |QueryType |
|----------------------------------|--------------------------|
|Full-text |`TextQuery()` |
|Attribute (structure or chemical) |`AttributeQuery()` |
|Sequence similarity |`SequenceQuery()` |
|Sequence motif |`SequenceMotifQuery()` |
|Structure similarity |`StructSimilarityQuery()` |
|Structure motif |`StructMotifQuery()` |
|Chemical similarity |`ChemSimilarityQuery()` |
Learn more about available search services on the [RCSB PDB Search API docs](https://search.rcsb.org/#search-services).
## Jupyter Notebooks
A runnable jupyter notebook is available in [notebooks/quickstart.ipynb](https://github.com/rcsb/py-rcsbsearchapi/blob/master/notebooks/quickstart.ipynb), or can be run online using Google Colab:
An additional Covid-19 related example is in [notebooks/covid.ipynb](https://github.com/rcsb/py-rcsbsearchapi/blob/master/notebooks/covid.ipynb):