parent
20d470736c
commit
32d6b6ced9
|
@ -239,9 +239,18 @@ fn value_to_py(py: Python, value: &Value) -> PyResult<PyObject> {
|
||||||
.into_py(py)
|
.into_py(py)
|
||||||
}
|
}
|
||||||
Value::Facet(f) => Facet { inner: f.clone() }.into_py(py),
|
Value::Facet(f) => Facet { inner: f.clone() }.into_py(py),
|
||||||
Value::Array(_arr) => {
|
Value::Array(arr) => {
|
||||||
// TODO implement me
|
let mut list = PyList::empty_bound(py);
|
||||||
unimplemented!();
|
// Because `value_to_py` can return an error, we need to be able
|
||||||
|
// to handle those errors on demand. Also, we want to avoid
|
||||||
|
// collecting all the values into an intermediate `Vec` before
|
||||||
|
// creating the `PyList`. So, the loop below is the simplest
|
||||||
|
// solution. Another option might have been
|
||||||
|
// `arr.iter().try_for_each(...)` but it just looks more complex.
|
||||||
|
for v in arr {
|
||||||
|
list.append(value_to_py(py, v)?)?;
|
||||||
|
}
|
||||||
|
list.into()
|
||||||
}
|
}
|
||||||
Value::Object(obj) => object_to_py(py, obj)?,
|
Value::Object(obj) => object_to_py(py, obj)?,
|
||||||
Value::Bool(b) => b.into_py(py),
|
Value::Bool(b) => b.into_py(py),
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
def test_json_bug():
|
||||||
|
import tantivy
|
||||||
|
|
||||||
|
schema_builder = tantivy.SchemaBuilder()
|
||||||
|
schema_builder.add_json_field("data", stored=True)
|
||||||
|
schema = schema_builder.build()
|
||||||
|
|
||||||
|
index = tantivy.Index(schema)
|
||||||
|
|
||||||
|
index_writer = index.writer()
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"name": "John Doe",
|
||||||
|
"age": 30,
|
||||||
|
"email": "john.doe@example.com",
|
||||||
|
"interests": ["reading", "hiking", "coding"],
|
||||||
|
}
|
||||||
|
import json
|
||||||
|
json_data = json.dumps(data)
|
||||||
|
|
||||||
|
doc = tantivy.Document()
|
||||||
|
doc.add_json("data", json_data)
|
||||||
|
index_writer.add_document(doc)
|
||||||
|
index_writer.commit()
|
||||||
|
index_writer.wait_merging_threads()
|
||||||
|
index.reload()
|
||||||
|
|
||||||
|
searcher = index.searcher()
|
||||||
|
|
||||||
|
query = "*"
|
||||||
|
q = index.parse_query(query)
|
||||||
|
top_docs = searcher.search(q, limit=10)
|
||||||
|
|
||||||
|
print(f"Total hits: {top_docs}")
|
||||||
|
for score, hit in top_docs.hits:
|
||||||
|
doc = searcher.doc(hit)
|
||||||
|
print(doc["data"])
|
||||||
|
assert doc["data"] == [{'age': 30,
|
||||||
|
'email': 'john.doe@example.com',
|
||||||
|
'interests': ['reading', 'hiking', 'coding'],
|
||||||
|
'name': 'John Doe'
|
||||||
|
}]
|
Loading…
Reference in New Issue