How can i set the target field in search query

Hi @SeungMin_Baek ! Welcome to our community :slight_smile:

So, consider you can search in two separate ways, and later even combine them in hybrid search.

In general words:

For Vector/Similarity search, Weaviate will:

  • get the property value and it’s name (or not, depending of your configuration. see skip:True and vectorizePropertyName)
  • concatenate all that resulting content
  • send it to an inference model
  • get back the vectors for all that concatenated content
  • index it in a, eg, HNSW index.

Now you can do similariy search. meaning, if you query for “Biggest city in Brazil”, Weaviate will:

  • Vectorize your query
  • Search your query vector against your objects vectors
  • Do all sorts of calculation
  • Bring back the closest results

You can also do keyword searches, using filters or bm25, for example, that will give you the closest objects in a different way.

Now, for bm25, you can choose wich fields it will search for. For example, from here:

    jeopardy = client.collections.get("JeopardyQuestion")
    response = jeopardy.query.bm25(
        query="safety",
        query_properties=["question"],
        return_metadata=wvc.query.MetadataQuery(score=True),
        limit=3
    )

    for o in response.objects:
        print(o.properties)
        print(o.metadata.score)

Ok. Now, in Weaviate, you can combine all that doing a hybrid search. Let’s say you want to query thru two fields, but want to weight in on a specific field. This is how you can do it from here:

    jeopardy = client.collections.get("JeopardyQuestion")
    response = jeopardy.query.hybrid(
        query="food",
        query_properties=["question^2", "answer"],
        alpha=0.25,
        limit=3
    )

    for o in response.objects:
        print(o.properties)

Let me know if this helps :slight_smile:

Also, check our events page, where you can learn a lot from our weekly and free events, online and in person:

Thanks!

1 Like